#!/bin/bash

# Script de instalación de aplicaciones para Arch Linux
# Autor: Basado en nuestra conversación
# Fecha: 2024

# Colores para output
VERDE='\033[0;32m'
AMARILLO='\033[1;33m'
ROJO='\033[0;31m'
AZUL='\033[0;34m'
SIN_COLOR='\033[0m'

# Función para imprimir mensajes con formato
print_message() {
    echo -e "${AZUL}[INFO]${SIN_COLOR} $1"
}

print_success() {
    echo -e "${VERDE}[OK]${SIN_COLOR} $1"
}

print_warning() {
    echo -e "${AMARILLO}[AVISO]${SIN_COLOR} $1"
}

print_error() {
    echo -e "${ROJO}[ERROR]${SIN_COLOR} $1"
}

# Función para verificar si un paquete está instalado
is_installed() {
    pacman -Q "$1" &> /dev/null
    return $?
}

# Función para instalar paquetes
install_package() {
    local paquete=$1
    local nombre_mostrar=${2:-$paquete}
    
    print_message "Verificando $nombre_mostrar..."
    
    if is_installed "$paquete"; then
        print_success "$nombre_mostrar ya está instalado"
    else
        print_message "Instalando $nombre_mostrar..."
        if sudo pacman -S --noconfirm "$paquete"; then
            print_success "$nombre_mostrar instalado correctamente"
        else
            print_error "Error al instalar $nombre_mostrar"
        fi
    fi
}

# Función para verificar e instalar ayudante de AUR (yay)
install_yay() {
    print_message "Verificando yay (ayudante de AUR)..."
    
    if command -v yay &> /dev/null; then
        print_success "yay ya está instalado"
        return 0
    fi
    
    print_warning "yay no está instalado. Procediendo a instalarlo..."
    
    # Instalar dependencias
    sudo pacman -S --needed --noconfirm git base-devel
    
    # Clonar e instalar yay
    cd /tmp
    git clone https://aur.archlinux.org/yay.git
    cd yay
    makepkg -si --noconfirm
    
    if command -v yay &> /dev/null; then
        print_success "yay instalado correctamente"
    else
        print_error "Error al instalar yay"
    fi
}

# Función principal
main() {
    echo "========================================="
    echo "  Script de instalación de aplicaciones"
    echo "========================================="
    echo ""
    
    # Verificar que estamos en Arch Linux
    if [ ! -f /etc/arch-release ]; then
        print_error "Este script solo funciona en Arch Linux y derivados"
        exit 1
    fi
    
    # Verificar conexión a internet
    print_message "Verificando conexión a internet..."
    if ! ping -c 1 google.com &> /dev/null; then
        print_error "No hay conexión a internet. Abortando."
        exit 1
    fi
    print_success "Conexión a internet OK"
    
    # Actualizar sistema
    print_message "Actualizando sistema..."
    sudo pacman -Syu --noconfirm
    print_success "Sistema actualizado"
    
    echo ""
    print_message "Comenzando instalación de aplicaciones..."
    echo ""
    
    # Aplicaciones multimedia
    print_message "=== APLICACIONES MULTIMEDIA ==="
    install_package "vlc" "VLC Media Player"
    install_package "audacious" "Audacious"
    install_package "audacious-plugins" "Plugins de Audacious"
    install_package "qmmp" "Qmmp (alternativa a Audacious)"
    
    # Herramientas del sistema
    print_message "=== HERRAMIENTAS DEL SISTEMA ==="
    install_package "unzip" "Unzip"
    install_package "unrar" "Unrar"
    install_package "p7zip" "7-Zip"
    install_package "ntfs-3g" "Soporte NTFS"
    install_package "gparted" "GParted (editor de particiones)"
    install_package "htop" "Htop (monitor del sistema)"
    install_package "neofetch" "Neofetch (info del sistema)"
    install_package "git" "Git"
    install_package "base-devel" "Base devel (compilación)"
    
    # Navegadores
    print_message "=== NAVEGADORES ==="
    install_package "chromium" "Chromium"
    install_package "firefox" "Firefox"
    
    # Gestores de contraseñas
    print_message "=== GESTORES DE CONTRASEÑAS ==="
    install_package "keepassxc" "KeePassXC"
    
    # Java
    print_message "=== JAVA ==="
    install_package "jre-openjdk" "Java Runtime Environment"
    
    # Codecs y extras
    print_message "=== CODECS Y EXTRAS ==="
    install_package "ffmpeg" "FFmpeg"
    install_package "flac" "FLAC (audio sin pérdida)"
    install_package "wget" "Wget"
    install_package "curl" "Curl"
    
    # Aplicaciones Flatpak (opcional)
    echo ""
    read -p "¿Deseas instalar soporte Flatpak? (s/N): " -n 1 -r
    echo ""
    if [[ $REPLY =~ ^[Ss]$ ]]; then
        install_package "flatpak" "Flatpak"
        print_message "Añadiendo repositorio Flathub..."
        flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
        print_success "Flathub añadido"
    fi
    
    # Instalación de yay (opcional)
    echo ""
    read -p "¿Deseas instalar yay (ayudante de AUR)? (s/N): " -n 1 -r
    echo ""
    if [[ $REPLY =~ ^[Ss]$ ]]; then
        install_yay
    fi
    
    echo ""
    print_success "¡Instalación completada!"
    echo ""
    print_message "Puedes encontrar las aplicaciones instaladas en tu menú de aplicaciones"
    print_message "o ejecutarlas desde la terminal con su nombre (ej: 'vlc', 'audacious')"
    echo "========================================="
}

# Ejecutar función principal
main
