#!/usr/bin/env fish

set -x -g FISHAMNIUM_COLOR_RESET "\x1b[0m"
set -x -g FISHAMNIUM_COLOR_BOLD "\x1b[1m"
set -x -g FISHAMNIUM_COLOR_NORMAL "\x1b[22m"
set -x -g FISHAMNIUM_COLOR_ERROR "\x1b[31m\x1b[1m"
set -x -g FISHAMNIUM_COLOR_SUCCESS "\x1b[32m\x1b[1m"
set -x -g FISHAMNIUM_COLOR_PRIMARY "\x1b[35m\x1b[1m"
set -x -g FISHAMNIUM_COLOR_SECONDARY "\x1b[34m\x1b[1m"

# Check fish version and other dependencies
set version_tokens $(string split -- "." "$version")

if test $version_tokens[1] -lt 3 -o $version_tokens[1] -lt 3
  echo -e "$FISHAMNIUM_COLOR_ERRORFishamnium requires Fish $FISHAMNIUM_COLOR_RESET3.3.0$FISHAMNIUM_COLOR_ERROR or greater, while you are on $FISHAMNIUM_COLOR_RESET$version$FISHAMNIUM_COLOR_ERROR.$FISHAMNIUM_COLOR_RESET"
  exit 1
end

if ! which yq >/dev/null 2>/dev/null
  echo -e "$FISHAMNIUM_COLOR_ERRORFishamnium requires yq $FISHAMNIUM_COLOR_RESET4.18.1$FISHAMNIUM_COLOR_ERROR or greater. Please check $FISHAMNIUM_COLOR_RESEThttp://mikefarah.github.io/yq/#install$FISHAMNIUM_COLOR_ERROR.$FISHAMNIUM_COLOR_RESET"
  exit 1
end

if ! which starship >/dev/null 2>/dev/null
  echo -e "$FISHAMNIUM_COLOR_ERRORFishamnium requires starship $FISHAMNIUM_COLOR_RESET1.2.1$FISHAMNIUM_COLOR_ERROR or greater. Please check $FISHAMNIUM_COLOR_RESEThttps://starship.rs/guide/#🚀-installation$FISHAMNIUM_COLOR_ERROR.$FISHAMNIUM_COLOR_RESET"
  exit 1
end

# Set global parameters
argparse "l/local" "u/ininstall" -- $argv

set origPwd $PWD
set repo ShogunPanda/fishamnium
set target ~/.config/fish/fishamnium
set loaderDirectory ~/.config/fish/conf.d
set loader "$loaderDirectory/fishamnium.fish"
set source /tmp/fishamnium-(date +%Y%m%d%H%M%S)

# Check main operation
if ! set -q _flag_u
  # Clone locally if asked to
  if ! set -q _flag_l
    set fishamniumVersion $(curl -s https://api.github.com/repos/$repo/releases | yq ".[0].tag_name | sub(\"v\", \"\")")
    echo -e "$FISHAMNIUM_COLOR_PRIMARY--> Downloading Fishamnium $fishamniumVersion into $FISHAMNIUM_COLOR_RESET$source$FISHAMNIUM_COLOR_PRIMARY ...$FISHAMNIUM_COLOR_RESET"
    
    mkdir -p $source; or exit 1
    curl -sSL -o $source/fishamnium.tar.gz https://github.com/$repo/archive/refs/tags/v$fishamniumVersion.tar.gz; or exit 1
    tar -zxf $source/fishamnium.tar.gz -C $source --strip-components=1; or exit 1
    cd "$source"
  end

  # Remove previous installations
  echo -e "$FISHAMNIUM_COLOR_PRIMARY--> Removing any previous fishamnium installations in $FISHAMNIUM_COLOR_RESET$target$FISHAMNIUM_COLOR_PRIMARY ...$FISHAMNIUM_COLOR_RESET"
  command rm -rf "$target" "$loader"; or exit 1

  # Create required directories
  echo -e "$FISHAMNIUM_COLOR_PRIMARY--> Creating required directories ...$FISHAMNIUM_COLOR_RESET"  
  command mkdir -vp "$target" "$loaderDirectory"; or exit 1

  # Copy files
  echo -e "$FISHAMNIUM_COLOR_PRIMARY--> Copying fishamnium in $FISHAMNIUM_COLOR_RESET$target$FISHAMNIUM_COLOR_PRIMARY ...$FISHAMNIUM_COLOR_RESET"
  command cp -av data completions plugins themes installer version "$target" | sort; or exit 1

  echo -e "$FISHAMNIUM_COLOR_PRIMARY--> Copying loader file in $FISHAMNIUM_COLOR_RESET$loader$FISHAMNIUM_COLOR_PRIMARY ...$FISHAMNIUM_COLOR_RESET"
  command cp -av loader.fish "$loader"; or exit 1

  # Ensure permissions
  echo -e "$FISHAMNIUM_COLOR_PRIMARY--> Fixing file permissions ...$FISHAMNIUM_COLOR_RESET"
  command chmod -R a+x "$target" "$loader"; or exit 1

  # Remove temporary directory if needed
  if ! set -q _flag_l
    echo -e "$FISHAMNIUM_COLOR_PRIMARY--> Removing temporary installation files in $FISHAMNIUM_COLOR_RESET$source$FISHAMNIUM_COLOR_PRIMARY ...$FISHAMNIUM_COLOR_RESET"
    cd "$origPwd"
    command rm -rf "$source"; or exit 1
  end

  # Print a status
  printf "\n$FISHAMNIUM_COLOR_SUCCESS--> To load fish right now without restarting the terminal, run: $FISHAMNIUM_COLOR_RESETsource ~/.config/fish/conf.d/fishamnium.fish$FISHAMNIUM_COLOR_SUCCESS"
  printf "\n$FISHAMNIUM_COLOR_SUCCESS--> Fishamnium has been installed. Hope you will like it. Enjoy! \U0001F37A$FISHAMNIUM_COLOR_RESET\n"
else
  echo -e "$FISHAMNIUM_COLOR_PRIMARY--> Removing directory $FISHAMNIUM_COLOR_RESET$target$FISHAMNIUM_COLOR_PRIMARY and loader file $FISHAMNIUM_COLOR_RESET$loader$FISHAMNIUM_COLOR_PRIMARY ...$FISHAMNIUM_COLOR_RESET"
  command rm -rf "$target" "$loader"; or exit 1

  echo -e "$FISHAMNIUM_COLOR_PRIMARY--> Removing loader file $FISHAMNIUM_COLOR_RESET$loader$FISHAMNIUM_COLOR_PRIMARY ...$FISHAMNIUM_COLOR_RESET"
  command rm -rf "$loader"; or exit 1

  printf "\n$FISHAMNIUM_COLOR_SUCCESS--> Fishamnium has been uninstalled. Hope you liked it. Farewell! \U0001F37A$FISHAMNIUM_COLOR_RESET\n"
end