#!/usr/bin/env bash

ALIASES_FILE="$HOME/.fedya_aliases"
EDITOR_CMD="${EDITOR:-nano}"

# Модерна цветна палитра
C_RESET=$'\033[0m'
C_BOLD=$'\033[1m'
C_DIM=$'\033[2m'

# Основни цветове
C_PRIMARY=$'\033[38;5;81m'      # Светло синьо
C_SUCCESS=$'\033[38;5;82m'      # Зелено
C_WARNING=$'\033[38;5;214m'     # Оранжево
C_ERROR=$'\033[38;5;196m'       # Червено
C_INFO=$'\033[38;5;147m'        # Лавандула

# Акцентни цветове
C_TITLE=$'\033[38;5;213m'       # Розово-лилаво
C_KEY=$'\033[38;5;226m'         # Жълто
C_VAL=$'\033[38;5;153m'         # Светло синьо
C_BORDER=$'\033[38;5;240m'      # Сиво

# Box drawing символи
BOX_TL="╭"
BOX_TR="╮"
BOX_BL="╰"
BOX_BR="╯"
BOX_H="─"
BOX_V="│"
BOX_VR="├"
BOX_VL="┤"

ensure_file() {
    [ -f "$ALIASES_FILE" ] || touch "$ALIASES_FILE"
}

print_header() {
    local width=70
    clear
    echo
    printf "%b" "${C_PRIMARY}${C_BOLD}"
    printf "%s%${width}s%s\n" "$BOX_TL" "" "$BOX_TR" | tr ' ' "$BOX_H"
    printf "%s%-${width}s%s\n" "$BOX_V" "  🎨 ALIASCTL - Мениджърът на Федя за Bash Алиаси" "$BOX_V"
    printf "%s%${width}s%s\n" "$BOX_BL" "" "$BOX_BR" | tr ' ' "$BOX_H"
    printf "%b\n" "${C_RESET}"
}

print_box() {
    local text="$1"
    local color="$2"
    local width=70
    printf "%b%s%b\n" "${color}" "$text" "${C_RESET}"
}

list_aliases() {
    ensure_file
    print_header

    local count=$(grep -c '^alias ' "$ALIASES_FILE" 2>/dev/null || echo 0)

    printf "%b%s %s%b\n" "${C_INFO}${C_BOLD}" "📦 Общо алиаси:" "$count" "${C_RESET}"
    printf "%b%s%b\n\n" "${C_DIM}" "Файл: $ALIASES_FILE" "${C_RESET}"

    if [ "$count" -eq 0 ]; then
        printf "%b%s%b\n\n" "${C_WARNING}" "  ⚠️  Няма дефинирани алиаси" "${C_RESET}"
    else
        printf "%b%-20s   %s%b\n" "${C_BORDER}${C_DIM}" "Име" "Команда" "${C_RESET}"
        printf "%b%s%b\n" "${C_BORDER}" "$(printf '%.0s─' {1..70})" "${C_RESET}"

        grep '^alias ' "$ALIASES_FILE" 2>/dev/null \
        | sed 's/^alias //' \
        | while IFS= read -r line; do
            name="${line%%=*}"
            cmd="${line#*=}"
            cmd="${cmd#\'}"
            cmd="${cmd%\'}"

            # Ограничаване на дължината за по-добра визия
            if [ ${#cmd} -gt 45 ]; then
                cmd="${cmd:0:42}..."
            fi

            printf "  %b%-18s%b → %b%s%b\n" \
                "$C_KEY" "$name" "$C_RESET" "$C_VAL" "$cmd" "$C_RESET"
          done
        echo
    fi
}

add_alias() {
    ensure_file
    print_header

    printf "%b%s%b\n\n" "${C_SUCCESS}${C_BOLD}" "➕ Добавяне на нов алиас" "${C_RESET}"

    printf "%b%s%b" "${C_INFO}" "Име на алиаса: " "${C_RESET}"
    read -r name

    # Проверка за празно име
    if [ -z "$name" ]; then
        printf "\n%b%s%b\n" "${C_ERROR}" "❌ Името не може да бъде празно!" "${C_RESET}"
        sleep 2
        return
    fi

    # Проверка дали съществува
    if grep -q "^alias $name=" "$ALIASES_FILE" 2>/dev/null; then
        printf "\n%b%s%b\n" "${C_ERROR}" "❌ Алиас '$name' вече съществува!" "${C_RESET}"
        sleep 2
        return
    fi

    printf "%b%s%b" "${C_INFO}" "Команда: " "${C_RESET}"
    read -r cmd

    if [ -z "$cmd" ]; then
        printf "\n%b%s%b\n" "${C_ERROR}" "❌ Командата не може да бъде празна!" "${C_RESET}"
        sleep 2
        return
    fi

    printf "alias %s='%s'\n" "$name" "$cmd" >> "$ALIASES_FILE"
    printf "\n%b%s%b %b%s%b\n" "${C_SUCCESS}${C_BOLD}" "✅ Успешно добавен:" "${C_RESET}" "${C_KEY}" "$name" "${C_RESET}"
    sleep 2
}

remove_alias() {
    ensure_file
    print_header

    printf "%b%s%b\n\n" "${C_WARNING}${C_BOLD}" "🗑️  Премахване на алиас" "${C_RESET}"

    local count=$(grep -c '^alias ' "$ALIASES_FILE" 2>/dev/null || echo 0)
    if [ "$count" -eq 0 ]; then
        printf "%b%s%b\n" "${C_WARNING}" "⚠️  Няма алиаси за премахване" "${C_RESET}"
        sleep 2
        return
    fi

    printf "%b%s%b" "${C_INFO}" "Име на алиаса за премахване: " "${C_RESET}"
    read -r name

    if [ -z "$name" ]; then
        printf "\n%b%s%b\n" "${C_ERROR}" "❌ Не е въведено име!" "${C_RESET}"
        sleep 2
        return
    fi

    if grep -q "^alias $name=" "$ALIASES_FILE" 2>/dev/null; then
        sed -i "/^alias $name=/d" "$ALIASES_FILE"
        printf "\n%b%s%b %b%s%b\n" "${C_SUCCESS}${C_BOLD}" "✅ Премахнат:" "${C_RESET}" "${C_KEY}" "$name" "${C_RESET}"
    else
        printf "\n%b%s%b\n" "${C_ERROR}" "❌ Алиас '$name' не съществува!" "${C_RESET}"
    fi
    sleep 2
}

edit_aliases() {
    ensure_file
    "$EDITOR_CMD" "$ALIASES_FILE"
}

fzf_menu() {
    if ! command -v fzf >/dev/null; then
        print_header
        printf "%b%s%b\n" "${C_ERROR}" "❌ fzf не е инсталиран!" "${C_RESET}"
        printf "%b%s%b\n" "${C_INFO}" "Инсталирай с: sudo dnf install fzf" "${C_RESET}"
        sleep 3
        return
    fi

    ensure_file
    local selected=$(grep '^alias ' "$ALIASES_FILE" 2>/dev/null \
        | sed 's/^alias //' \
        | fzf --height=40% --border --prompt="🔍 Търсене: " \
              --color="fg:#d0d0d0,bg:#1e1e1e,hl:#5fd7ff" \
              --color="fg+:#ffffff,bg+:#2e2e2e,hl+:#ffaf00" \
              --color="info:#af87ff,prompt:#5fd7ff,pointer:#ff87d7" \
              --color="marker:#87ff00,spinner:#ff87d7,header:#87afaf")

    if [ -n "$selected" ]; then
        print_header
        printf "%b%s%b\n\n" "${C_SUCCESS}" "Избран алиас:" "${C_RESET}"
        printf "%b%s%b\n" "${C_VAL}" "$selected" "${C_RESET}"
        echo
        read -rp "Натисни Enter за продължаване..."
    fi
}

show_help() {
    print_header

    printf "%b%s%b\n\n" "${C_INFO}${C_BOLD}" "📖 Помощна информация" "${C_RESET}"

    printf "%b%s%b\n" "${C_PRIMARY}" "Файл с алиаси:" "${C_RESET}"
    printf "  %b%s%b\n\n" "${C_VAL}" "$ALIASES_FILE" "${C_RESET}"

    printf "%b%s%b\n" "${C_PRIMARY}" "Редактор:" "${C_RESET}"
    printf "  %b%s%b\n\n" "${C_VAL}" "$EDITOR_CMD" "${C_RESET}"

    printf "%b%s%b\n" "${C_PRIMARY}" "За да заредиш алиасите:" "${C_RESET}"
    printf "  %b%s%b\n" "${C_VAL}" "source $ALIASES_FILE" "${C_RESET}"
    printf "  или добави в %b~/.bashrc%b:\n" "${C_VAL}" "${C_RESET}"
    printf "  %b%s%b\n\n" "${C_VAL}" "[ -f $ALIASES_FILE ] && source $ALIASES_FILE" "${C_RESET}"


       # Добавяне на линк към сайта
    printf "%b%s%b\n" "${C_PRIMARY}" "Посети сайта ми за още полезни неща:" "${C_RESET}"
    printf "  %b%s%b\n\n" "${C_VAL}" "https://urocibg.eu/" "${C_RESET}"

    read -rp "Натисни Enter за продължаване..."
}

main_menu() {
    print_header

    printf "%b%s%b\n" "${C_BORDER}${C_DIM}" "Избери опция:" "${C_RESET}"
    echo

    printf "  %b[1]%b  📋 Преглед на всички алиаси\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
    printf "  %b[2]%b  ➕ Добавяне на нов алиас\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
    printf "  %b[3]%b  🗑️  Премахване на алиас\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
    printf "  %b[4]%b  ✏️  Редактиране на файла\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
    printf "  %b[5]%b  🔍 FZF интерактивен преглед\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
    printf "  %b[6]%b  📖 Помощ\n" "${C_KEY}${C_BOLD}" "${C_RESET}"
    echo
    printf "  %b[q]%b  🚪 Изход\n" "${C_ERROR}${C_BOLD}" "${C_RESET}"
    echo

    printf "%b%s%b " "${C_PRIMARY}" "➤" "${C_RESET}"
    read -r choice

    case "$choice" in
        1) list_aliases; read -rp "Натисни Enter за продължаване...";;
        2) add_alias;;
        3) remove_alias;;
        4) edit_aliases;;
        5) fzf_menu;;
        6) show_help;;
        q|Q)
            clear
            printf "\n%b%s%b\n\n" "${C_SUCCESS}${C_BOLD}" "👋 Довиждане!" "${C_RESET}"
            exit 0
            ;;
        *)
            printf "\n%b%s%b\n" "${C_ERROR}" "❌ Невалидна опция!" "${C_RESET}"
            sleep 1
            ;;
    esac
}

# Главен цикъл
while true; do
    main_menu
done