#!/usr/bin/env bash
# icon_manager.sh (v2)
#
# Un script de gestión para instalar y cambiar entre diferentes temas de iconos
# en un entorno Hyprland/Omarchy. Incluye temas base y personalizaciones.
#

set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/common.sh"

# --- Variables Globales ---
AUTOSTART_FILE="$HOME/.config/hypr/autostart.conf"
ICON_DIR_USER="$HOME/.local/share/icons"

# --- Funciones de Utilidad ---

# Función para verificar dependencias
check_deps() {
    if ! command_exists git; then
        log_error "git no está instalado. Por favor, instálalo para continuar (ej. sudo pacman -S git)."
        return 1
    fi
    return 0
}

# Función para aplicar la configuración de forma persistente
# Argumento 1: Nombre del tema de iconos (ej. 'Tela-nord-dark')
apply_theme() {
    local theme_name="$1"
    log_info "Aplicando el tema de iconos '$theme_name'..."

    mkdir -p "$(dirname "$AUTOSTART_FILE")"
    touch "$AUTOSTART_FILE"

    # Eliminar cualquier configuración de icon-theme anterior para evitar conflictos
    sed -i '/exec-once = gsettings set org.gnome.desktop.interface icon-theme/d' "$AUTOSTART_FILE"

    # Añadir el bloque de configuración si no existe
    if ! grep -Fq "CONFIGURACIÓN DE TEMA DE ICONOS" "$AUTOSTART_FILE"; then
        echo -e "\n# -----------------------------------------------------" >> "$AUTOSTART_FILE"
        echo "# CONFIGURACIÓN DE TEMA DE ICONOS" >> "$AUTOSTART_FILE"
        echo "# -----------------------------------------------------" >> "$AUTOSTART_FILE"
        echo "exec-once = /usr/lib/xdg-desktop-portal-gtk" >> "$AUTOSTART_FILE"
        echo "exec-once = sleep 1" >> "$AUTOSTART_FILE"
    fi
    
    # Añadir el comando gsettings para el tema seleccionado
    echo "exec-once = gsettings set org.gnome.desktop.interface icon-theme '$theme_name'" >> "$AUTOSTART_FILE"

    # Aplicar el tema en la sesión actual para un efecto inmediato
    gsettings set org.gnome.desktop.interface icon-theme "$theme_name"

    log_success "¡Tema configurado! Se aplicó en la sesión actual y se guardó en $AUTOSTART_FILE"
}

# --- Funciones de Instalación de Temas ---

# Función auxiliar para asegurar que el tema base Papirus esté instalado
ensure_papirus_installed() {
    local temp_dir="$1"
    if [[ ! -d "$ICON_DIR_USER/Papirus-Dark" ]]; then
        log_info "El tema base Papirus no está instalado. Instalándolo ahora..."
        git clone --depth 1 https://github.com/PapirusDevelopment/papirus-icon-theme.git "$temp_dir/papirus"
        "$temp_dir/papirus/install.sh"
    else
        log_info "El tema base Papirus ya está instalado."
    fi
}

# Función para instalar y aplicar el tema Tela Nord (usado como default)
# Argumento 1 (opcional): Directorio temporal a utilizar.
set_default_icon_theme() {
    local theme_name="Tela-nord-dark"
    local temp_dir_param="${1:-}" # Aceptar directorio temporal como parámetro
    log_info "Gestionando el tema de iconos por defecto '$theme_name'..."

    if [[ -d "$ICON_DIR_USER/$theme_name" ]]; then
        log_info "El tema '$theme_name' ya está instalado."
    else
        log_info "Instalando el tema '$theme_name'..."
        # Si no se pasa un directorio, crear uno propio y limpiarlo.
        # Si se pasa, usarlo sin limpiarlo (la función llamadora se encarga).
        local temp_dir="${temp_dir_param}"
        [[ -z "$temp_dir" ]] && temp_dir=$(mktemp -d)

        git clone --depth 1 https://github.com/vinceliuice/Tela-icon-theme.git "$temp_dir/tela"
        "$temp_dir/tela/install.sh" -c nord

        [[ -z "$temp_dir_param" ]] && rm -rf "$temp_dir"
    fi
    apply_theme "$theme_name"
}

install_papirus_standard() {
    local theme_name="Papirus-Dark"
    local temp_dir="$1"
    echo "--- Gestionando Papirus Icons (Estándar) ---"
    ensure_papirus_installed "$temp_dir"
    # Si el usuario quiere el Papirus estándar, restauramos los colores por si acaso
    if command_exists papirus-folders; then
        papirus-folders --default --theme "$theme_name"
    fi
    apply_theme "$theme_name"
}

install_candy() {
    local theme_name="Candy"
    local temp_dir="$1"
    echo "--- Gestionando Candy Icons ---"
    if [[ -d "$ICON_DIR_USER/$theme_name" ]]; then
        log_info "El tema ya está instalado."
    else
        log_info "Instalando el tema..."
        git clone --depth 1 https://github.com/EliverLara/candy-icons.git "$temp_dir/candy"
        "$temp_dir/candy/install.sh"
    fi
    apply_theme "$theme_name"
}

install_papirus_catppuccin() {
    local theme_name="Papirus-Dark"
    local catppuccin_flavor="mocha"
    local temp_dir="$1"

    echo "--- Gestionando Papirus Icons con colores Catppuccin ($catppuccin_flavor) ---"
    
    ensure_papirus_installed "$temp_dir"

    # 2. Descargar y ejecutar el script de personalización
    log_info "Descargando y aplicando el colorizador Catppuccin..."
    git clone --depth 1 https://github.com/catppuccin/papirus-folders.git "$temp_dir/papirus-folders-catppuccin"
    chmod +x "$temp_dir/papirus-folders-catppuccin/papirus-folders"
    
    # Ejecutar el script para cambiar el color de las carpetas
    "$temp_dir/papirus-folders-catppuccin/papirus-folders" -C "catppuccin-${catppuccin_flavor}" --theme "$theme_name"

    # 3. Aplicar el tema (el nombre sigue siendo Papirus-Dark, pero los iconos han cambiado)
    apply_theme "$theme_name"
}

# --- Función Principal (Menú) ---
run_module_main() {
    log_step "Gestor de Temas de Iconos para Hyprland"

    if ! check_deps; then
        return 1
    fi

    local temp_dir
    temp_dir=$(mktemp -d)
    trap 'rm -rf -- "$temp_dir"' EXIT

    while true; do
        clear
        echo -e "${CYAN}==========================================${NC}"
        echo -e "  ${BOLD}Gestor de Temas de Iconos para Hyprland${NC} "
        echo -e "${CYAN}==========================================${NC}"
        echo "Selecciona el tema que quieres instalar/activar:"
        echo
        echo -e "  ${GREEN}1)${NC} Tela (variante Nord)"
        echo -e "  ${GREEN}2)${NC} Papirus (estándar, oscuro)"
        echo -e "  ${GREEN}3)${NC} Papirus (con colores Catppuccin Mocha)"
        echo -e "  ${GREEN}4)${NC} Candy Icons"
        echo
        echo -e "  ${YELLOW}q)${NC} Volver al menú principal"
        echo
        read -p "Tu elección: " choice

        # Limpiar el directorio temporal para la nueva operación
        rm -rf -- "$temp_dir"/*

        case $choice in
            1) set_default_icon_theme "$temp_dir" ;;
            2) install_papirus_standard "$temp_dir" ;;
            3) install_papirus_catppuccin "$temp_dir" ;;
            4) install_candy "$temp_dir" ;;
            [qQ])
                log_info "Volviendo al menú principal."
                break
                ;;
            *) log_error "Opción no válida. Inténtalo de nuevo." ;;
        esac
        if [[ ! "$choice" =~ [qQ] ]]; then
            echo
            read -p "Presiona Enter para continuar..."
        fi
    done
    return 0
}

if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    run_module_main "$@"
fi