---
version: '3'

# This is your local Taskfile.yml file. You can define tasks and scripts while leveraging some of the nifty
# features of https://taskfile.dev. You can safely place your scripts here and they will be combined with
# a veteran stack of Taskfile.yml files. You can access the tasks defined here by running
# `task local:default` for example. You must keep all the tasks in this file without including other files
# because the main Taskfile.yml is a symlinked one. Anyway, try `task local:default`.
tasks:
  default: echo "Get started on https://taskfile.dev"
  bitwarden:
    cmds:
      - |
        # Command to copy to clipboard
        COPY="wl-copy"
        # Get list of all logins as json
        logins="$(bw list items)"
        # Grab the name of every login and pip them into fzf
        name="$(echo "$logins" | jq -r '.[].name' | fzf)"
        # Find the login with the selected name (as a json)
        selected="$(echo "$logins" | jq -r ".[] | select(.name == \"$name\")")"
        # Print the name of the selected login
        echo "Name: $(echo "$selected" | jq -r '.name')"
        echo "> Copying Username"
        # Copy the username to the clipboard
        printf '%s' "$(echo "$selected" | jq -r '.login.username')" | $COPY
        echo "Press any key to copy password..."
        # Wait for user input before coping the password
        read -r
        echo "> Copying Password"
        # Copy the password to the clipboard
        printf '%s' "$(echo "$selected" | jq -r '.login.password')" | $COPY

  browser:profile:save:brave:
    vars:
      BrowserProfile: >
        {{if eq OS "darwin"}}~/Library/Application\ Support/BraveSoftware/Brave-Browser/Default{{end}}
        {{if eq OS "linux"}}{{end}}
        {{if eq OS "windows"}}{{end}}
    cmds:
      - tar -czpf ~/brave-profile.tar.gz  {{.BrowserProfile}}

  browser:profile:save:chrome:
    vars:
      BrowserProfile: >
        {{if eq OS "darwin"}}~/Library/Application\ Support/BraveSoftware/Brave-Browser/Default{{end}}
        {{if eq OS "linux"}}{{end}}
        {{if eq OS "windows"}}{{end}}
    cmds:
      - tar -czpf ~/brave-profile.tar.gz  {{.BrowserProfile}}

  browser:profile:save:edge:
    vars:
      BrowserProfile: >
        {{if eq OS "darwin"}}~/Library/Application\ Support/BraveSoftware/Brave-Browser/Default{{end}}
        {{if eq OS "linux"}}{{end}}
        {{if eq OS "windows"}}{{end}}
    cmds:
      - tar -czpf ~/brave-profile.tar.gz  {{.BrowserProfile}}

  browser:profile:save:firefox:
    vars:
      BrowserProfile: >
        {{if eq OS "darwin"}}~/Library/Application\ Support/BraveSoftware/Brave-Browser/Default{{end}}
        {{if eq OS "linux"}}{{end}}
        {{if eq OS "windows"}}{{end}}
    cmds:
      - tar -czpf ~/brave-profile.tar.gz  {{.BrowserProfile}}

  font-test:
    cmds:
      - |
        echo -en "Regular"
        echo -en "\e[3m Italic \e[0m"
        echo -en "\e[1m Bold \e[0m"
        echo -en "\e[3m\e[1m Bold-Italic \e[0m"
        echo -en " \e[4mUnderline\e[0m "
        echo -e " \e[9mStrikethrough\e[0m"

  provision:
    desc: Provision the environment
    summary: |
      # Provision the Environment

      This task will provision the current environment using a variety of tools.
      It will prompt you for details like what type of environment you are provisioning.
      Optionally, you can skip the prompt by passing a CLI argument like so:

      **Example:**
      `run localhost:provision -- terminal`

      The above example will run the `localhost:provision:terminal` task.
    cmds:
      - |
        if [ "{{.CLI_ARGS}}" != "" ]; then
          run localhost:provision:{{.CLI_ARGS}}
        else
          run localhost:provision:prompt
        fi

  provision:prompt:
    deps:
      - :install:software:gum
    cmds:
      - logg prompt 'Select the type of environment you would like to provision'
      - logg prompt '`Terminal` - Installs standard CLI tools that augment the terminal experience'
      - logg prompt '`Development` - Provisions Terminal and also installs useful tools for development'
      - logg prompt '`Full` - Provisions with both Terminal and Development and then it installs all the Brewfile-supported software from the Gas Station project (e.g. https://gitlab.com/megabyte-labs/gas-station).'
      - |
        CHOICE="$(logg choose "Terminal" "Development" "Full")"
        if [ "$CHOICE" = 'Development' ]; then
          run localhost:provision:dev
        elif [ "$CHOICE" = 'Terminal' ]; then
          run localhost:provision:terminal
        elif [ "$CHOICE" = 'Full' ]; then
          run localhost:provision:full
        fi

  provision:dev:
    deps:
      - :install:software:bundle
      - provision:terminal
    cmds:
      - brew bundle --file "$HOME/.local/Brewfile.dev"

  provision:full:
    deps:
      - :install:software:bundle
      - provision:dev
    cmds:
      - brew bundle --file "$HOME/.local/Brewfile.full"

  provision:terminal:
    deps:
      - :install:software:bundle
    cmds:
      - brew bundle --file "$HOME/.local/Brewfile.terminal"

  squash-symlink:
    summary: |
      Example: find . -type l -exec /path/tos/script {} +
    cmds:
      - |
        set -e
        for link; do
            test -h "$link" || continue
            dir=$(dirname "$link")
            reltarget=$(readlink "$link")
            case $reltarget in
                /*) abstarget=$reltarget;;
                *)  abstarget=$dir/$reltarget;;
            esac
            rm -fv "$link"
            cp -afv "$abstarget" "$link" || {
                # on failure, restore the symlink
                rm -rfv "$link"
                ln -sfv "$reltarget" "$link"
            }
        done
