#!/bin/bash
export ANI_CLI_PLAYER=mpv-quality
export ANI_CLI_DOWNLOAD_DIR="$HOME/Downloads"
mkdir -p "$ANI_CLI_DOWNLOAD_DIR"

BOLD=$'\e[1m'; DIM=$'\e[2m'; RESET=$'\e[0m'
MAGENTA=$'\e[35m'; CYAN=$'\e[36m'; GREEN=$'\e[32m'; RED=$'\e[31m'; YELLOW=$'\e[33m'

CONFIG_FILE="$HOME/.ani-cli-menu-config"

quality_label() {
    case "$1" in
        best) echo "Best available quality" ;;
        1080) echo "1080p" ;;
        720) echo "720p" ;;
        480) echo "480p" ;;
        360) echo "360p" ;;
        worst) echo "Worst available quality" ;;
        *) echo "$1" ;;
    esac
}

ask_quality() {
    printf "  %s[1]%s Best available quality\n" "$CYAN$BOLD" "$RESET"
    printf "  %s[2]%s 1080p\n" "$CYAN$BOLD" "$RESET"
    printf "  %s[3]%s 720p\n" "$CYAN$BOLD" "$RESET"
    printf "  %s[4]%s 480p\n" "$CYAN$BOLD" "$RESET"
    printf "  %s[5]%s 360p\n" "$CYAN$BOLD" "$RESET"
    printf "  %s[6]%s Worst available quality\n\n" "$CYAN$BOLD" "$RESET"
    read -rp "$(printf '%s❯%s Choose the quality: ' "$YELLOW$BOLD" "$RESET")" qopcion

    case "$qopcion" in
        1) quality="best" ;;
        2) quality="1080" ;;
        3) quality="720" ;;
        4) quality="480" ;;
        5) quality="360" ;;
        6) quality="worst" ;;
        *)
            printf "\n%s✗ Invalid option, using the best available quality.%s\n" "$YELLOW" "$RESET"
            quality="best"
            ;;
    esac
    echo "$quality" > "$CONFIG_FILE"
}

# solo pregunta la primera vez (recien instalado, sin config guardada) --
# las siguientes veces usa la respuesta guardada sin volver a preguntar
if [ -s "$CONFIG_FILE" ]; then
    quality=$(cat "$CONFIG_FILE")
else
    clear
    printf "%s%s╔═══════════════════════════╗%s\n" "$BOLD" "$MAGENTA" "$RESET"
    printf "%s%s║        🎬  ANI-CLI        ║%s\n" "$BOLD" "$MAGENTA" "$RESET"
    printf "%s%s╚═══════════════════════════╝%s\n\n" "$BOLD" "$MAGENTA" "$RESET"
    ask_quality
fi

# ani-cli termina con codigo de error si no encuentra el anime o no hay
# fuentes de video validas -- antes eso tumbaba todo el script y te dejaba en
# la terminal; ahora vuelve a mostrar el menu para poder buscar de nuevo
while true; do
    clear
    printf "%s%s╔═══════════════════════════╗%s\n" "$BOLD" "$MAGENTA" "$RESET"
    printf "%s%s║        🎬  ANI-CLI        ║%s\n" "$BOLD" "$MAGENTA" "$RESET"
    printf "%s%s╚═══════════════════════════╝%s\n\n" "$BOLD" "$MAGENTA" "$RESET"

    printf "  %s[1]%s Watch (play)\n" "$CYAN$BOLD" "$RESET"
    printf "  %s[2]%s Download to ~/Downloads\n" "$CYAN$BOLD" "$RESET"
    printf "  %s[3]%s Change default quality %s(current: %s)%s\n\n" \
        "$CYAN$BOLD" "$RESET" "$YELLOW" "$(quality_label "$quality")" "$RESET"
    read -rp "$(printf '%s❯%s Choose an option: ' "$YELLOW$BOLD" "$RESET")" opcion

    case "$opcion" in
        1)
            printf "\n%s▶ Playing in quality %s...%s\n\n" "$GREEN" "$quality" "$RESET"
            ani-cli -q "$quality"
            status=$?
            ;;
        2)
            printf "\n%s⬇ Downloading in quality %s to ~/Downloads...%s\n\n" "$GREEN" "$quality" "$RESET"
            ani-cli -q "$quality" -d
            status=$?
            ;;
        3)
            echo
            ask_quality
            continue
            ;;
        *)
            printf "\n%s✗ Invalid option.%s\n" "$RED" "$RESET"
            exit 1
            ;;
    esac

    if [ "$status" -ne 0 ]; then
        printf "\n%s✗ Could not complete the search (anime not found or no sources available). Try again.%s\n" "$RED" "$RESET"
        read -rp "$(printf 'Press enter to go back to the menu...')" _
        continue
    fi

    break
done
