#!/usr/bin/env bash
# install_wails
# -------------
# Instala Wails v2 — framework para aplicaciones de escritorio en Go.
# Detecta la distribución Linux e instala las dependencias de sistema necesarias
# (GTK3, WebKit2GTK, build tools) y luego instala el CLI de Wails via go install.
#
# USO:
#   source install_wails.sh
#   install_wails

install_wails() {
    echo "Instalando Wails..."
    echo ""

    # Verificar Go
    if ! command -v go &>/dev/null; then
        echo "install_wails: Go no está instalado (requerido)" >&2
        echo "  Instálalo primero con install_go" >&2
        return 1
    fi

    local go_version
    go_version="$(go version)"
    echo "Go detectado: ${go_version}"
    echo ""

    # Detectar distribución
    local distro="unknown"
    if [[ -f /etc/os-release ]]; then
        # shellcheck disable=SC1091
        distro="$(. /etc/os-release && echo "${ID:-unknown}")"
    else
        echo "install_wails: no se pudo detectar la distribución de Linux" >&2
        return 1
    fi

    echo "Instalando dependencias del sistema para ${distro}..."
    case "$distro" in
        ubuntu|debian|linuxmint|pop)
            sudo apt update
            if ! sudo apt install -y libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config; then
                echo "install_wails: falló la instalación de dependencias de sistema" >&2
                return 1
            fi
            ;;
        fedora|rhel|centos)
            if ! sudo dnf install -y gtk3-devel webkit2gtk3-devel gcc-c++ pkgconfig; then
                echo "install_wails: falló la instalación de dependencias de sistema" >&2
                return 1
            fi
            ;;
        arch|manjaro)
            if ! sudo pacman -Sy --noconfirm gtk3 webkit2gtk base-devel; then
                echo "install_wails: falló la instalación de dependencias de sistema" >&2
                return 1
            fi
            ;;
        opensuse*)
            if ! sudo zypper install -y gtk3-devel webkit2gtk3-devel gcc-c++ pkg-config; then
                echo "install_wails: falló la instalación de dependencias de sistema" >&2
                return 1
            fi
            ;;
        *)
            echo "Distribución no reconocida: ${distro}"
            echo "Instala manualmente: gtk3, webkit2gtk, build-essential, pkg-config"
            echo "Continuando con la instalación de Wails CLI..."
            ;;
    esac

    echo ""
    echo "Instalando Wails CLI (go install github.com/wailsapp/wails/v2/cmd/wails@latest)..."
    if ! go install github.com/wailsapp/wails/v2/cmd/wails@latest; then
        echo "install_wails: falló la instalación del CLI de Wails" >&2
        return 1
    fi

    # Asegurar que $GOPATH/bin esté en PATH
    if [[ ":$PATH:" != *":$HOME/go/bin:"* ]]; then
        local shell_config=""
        if [[ -f "$HOME/.bashrc" ]]; then
            shell_config="$HOME/.bashrc"
        elif [[ -f "$HOME/.zshrc" ]]; then
            shell_config="$HOME/.zshrc"
        fi

        if [[ -n "$shell_config" ]]; then
            if ! grep -q 'export PATH=\$PATH:\$HOME/go/bin' "$shell_config" 2>/dev/null; then
                {
                    echo ""
                    echo "# Go binaries"
                    echo 'export PATH=$PATH:$HOME/go/bin'
                } >> "$shell_config"
                echo "PATH de Go añadido a ${shell_config}"
            fi
        fi
        export PATH="$PATH:$HOME/go/bin"
    fi

    echo ""

    # Verificar instalación
    if command -v wails &>/dev/null; then
        local wails_version
        wails_version="$(wails version 2>/dev/null || echo "instalado")"
        echo "Wails instalado correctamente: ${wails_version}"
        echo ""
        echo "Comandos básicos de Wails:"
        echo "  wails init -n myapp -t vanilla  - Crear proyecto"
        echo "  wails dev                        - Modo desarrollo"
        echo "  wails build                      - Build producción"
        echo "  wails doctor                     - Verificar instalación"
    else
        echo "Wails instalado pero no está en PATH."
        echo "  Reinicia tu terminal o ejecuta: source ~/.bashrc"
    fi
}

# Ejecutar si se invoca directamente
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
    install_wails "$@"
fi
