#!/bin/bash
# 🍷 WineDroid — Roda programas Windows no Android via Termux + proot + XFCE + VNC
# Uso: winedroid [comando]

set -e

# ─── Cores ────────────────────────────────────────────────────────────────────
R='\033[0;31m' G='\033[0;32m' Y='\033[1;33m'
C='\033[0;36m' W='\033[1;37m' GR='\033[0;90m' NC='\033[0m'

# ─── Config ───────────────────────────────────────────────────────────────────
DISTRO="ubuntu"
DISTRO_VERSION="22.04"
PROOT_DIR="$HOME/winedroid-rootfs"
VNC_PORT=5901
VNC_DISPLAY=":1"
VNC_RESOLUTION="1280x720"
VNC_PASSWD="donut123"
LOG="$HOME/.winedroid.log"

# ─── Banner ───────────────────────────────────────────────────────────────────
banner() {
    echo ""
    echo -e "${Y}  ██╗    ██╗██╗███╗   ██╗███████╗${NC}"
    echo -e "${Y}  ██║    ██║██║████╗  ██║██╔════╝${NC}"
    echo -e "${Y}  ██║ █╗ ██║██║██╔██╗ ██║█████╗  ${NC}"
    echo -e "${Y}  ██║███╗██║██║██║╚██╗██║██╔══╝  ${NC}"
    echo -e "${Y}  ╚███╔███╔╝██║██║ ╚████║███████╗${NC}"
    echo -e "${Y}   ╚══╝╚══╝ ╚═╝╚═╝  ╚═══╝╚══════╝${NC}"
    echo -e "${W}  DROID${NC} ${GR}— Windows apps on Android${NC}"
    echo ""
}

# ─── Log ──────────────────────────────────────────────────────────────────────
log()  { echo -e "${GR}  [log] $1${NC}" >> "$LOG"; }
info() { echo -e "${C}  → $1${NC}"; log "$1"; }
ok()   { echo -e "${G}  ✓ $1${NC}"; log "OK: $1"; }
err()  { echo -e "${R}  ✗ $1${NC}"; log "ERR: $1"; }
warn() { echo -e "${Y}  ⚠ $1${NC}"; log "WARN: $1"; }

# ─── Pré-requisitos Termux ────────────────────────────────────────────────────
install_termux_deps() {
    info "Atualizando repositórios Termux..."
    pkg update -y >> "$LOG" 2>&1

    info "Instalando dependências base..."
    pkg install -y \
        proot-distro \
        x11-repo \
        tigervnc \
        wget \
        curl \
        git \
        openssh >> "$LOG" 2>&1 || true

    ok "Dependências Termux instaladas"
}

# ─── Instalar Ubuntu via proot-distro ─────────────────────────────────────────
install_distro() {
    if proot-distro list | grep -q "ubuntu.*installed"; then
        ok "Ubuntu já instalado"
        return
    fi

    info "Instalando Ubuntu 22.04 (proot)..."
    info "Isso pode demorar alguns minutos..."
    proot-distro install ubuntu >> "$LOG" 2>&1
    ok "Ubuntu instalado"
}

# ─── Script que roda DENTRO do proot (Ubuntu) ─────────────────────────────────
generate_setup_script() {
    cat > "$HOME/winedroid-setup-inner.sh" << 'INNEREOF'
#!/bin/bash
set -e
export DEBIAN_FRONTEND=noninteractive

echo "  → Atualizando apt..."
apt-get update -qq 2>/dev/null

echo "  → Instalando XFCE4..."
apt-get install -y --no-install-recommends \
    xfce4 \
    xfce4-terminal \
    xfce4-taskmanager \
    xfce4-screenshooter \
    thunar \
    dbus-x11 \
    2>/dev/null

echo "  → Instalando TigerVNC server..."
apt-get install -y tigervnc-standalone-server tigervnc-common 2>/dev/null

echo "  → Instalando Wine..."
dpkg --add-architecture i386 2>/dev/null || true
apt-get update -qq 2>/dev/null
apt-get install -y --no-install-recommends \
    wine \
    wine32 \
    wine64 \
    winetricks \
    2>/dev/null || \
apt-get install -y wine-stable 2>/dev/null || \
apt-get install -y wine 2>/dev/null

echo "  → Instalando utilitários..."
apt-get install -y --no-install-recommends \
    nano \
    unzip \
    curl \
    wget \
    fonts-liberation \
    fonts-wine \
    2>/dev/null

# Configurar VNC
mkdir -p ~/.vnc
echo "donut123" | vncpasswd -f > ~/.vnc/passwd
chmod 600 ~/.vnc/passwd

# Configurar xstartup do VNC
cat > ~/.vnc/xstartup << 'VNCEOF'
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
export XKL_XMODMAP_DISABLE=1
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
startxfce4 &
VNCEOF
chmod +x ~/.vnc/xstartup

# Tema XFCE mínimo
mkdir -p ~/.config/xfce4/xfconf/xfce-perchannel-xml
cat > ~/.config/xfce4/xfconf/xfce-perchannel-xml/xfwm4.xml << 'XFCEEOF'
<?xml version="1.0" encoding="UTF-8"?>
<channel name="xfwm4" version="1.0">
  <property name="general" type="empty">
    <property name="theme" type="string" value="Greybird"/>
    <property name="title_font" type="string" value="Sans Bold 9"/>
  </property>
</channel>
XFCEEOF

echo "  ✓ Setup completo dentro do proot"
INNEREOF
    chmod +x "$HOME/winedroid-setup-inner.sh"
}

# ─── Rodar setup dentro do proot ──────────────────────────────────────────────
run_inner_setup() {
    info "Configurando Wine + XFCE dentro do Ubuntu..."
    proot-distro login ubuntu -- bash /root/winedroid-setup-inner.sh
    # Copia o script para dentro do proot
    cp "$HOME/winedroid-setup-inner.sh" "$PROOT_DIR/root/" 2>/dev/null || true
    ok "Ambiente configurado"
}

# ─── Iniciar VNC ──────────────────────────────────────────────────────────────
start_vnc() {
    info "Iniciando servidor VNC na porta $VNC_PORT..."

    # Script de start do VNC dentro do proot
    cat > "$HOME/winedroid-start-vnc.sh" << VNCSTART
#!/bin/bash
export DISPLAY=$VNC_DISPLAY
export HOME=/root
export USER=root

# Mata VNC anterior se existir
vncserver -kill $VNC_DISPLAY 2>/dev/null || true
sleep 1

# Inicia VNC
vncserver $VNC_DISPLAY \
    -geometry $VNC_RESOLUTION \
    -depth 24 \
    -localhost no \
    -SecurityTypes VncAuth \
    -rfbport $VNC_PORT

echo "VNC rodando na porta $VNC_PORT"
VNCSTART
    chmod +x "$HOME/winedroid-start-vnc.sh"

    proot-distro login ubuntu -- bash /root/winedroid-start-vnc.sh &
    sleep 3

    ok "VNC iniciado!"
    echo ""
    echo -e "${Y}  ╔══════════════════════════════════════╗${NC}"
    echo -e "${Y}  ║    🍷 WineDroid rodando!             ║${NC}"
    echo -e "${Y}  ╠══════════════════════════════════════╣${NC}"
    echo -e "${Y}  ║${NC}  Host:   ${W}127.0.0.1${NC}                   ${Y}║${NC}"
    echo -e "${Y}  ║${NC}  Porta:  ${W}$VNC_PORT${NC}                      ${Y}║${NC}"
    echo -e "${Y}  ║${NC}  Senha:  ${W}$VNC_PASSWD${NC}                 ${Y}║${NC}"
    echo -e "${Y}  ╠══════════════════════════════════════╣${NC}"
    echo -e "${Y}  ║${NC}  App:    ${C}AVNC / RealVNC / VNC Viewer${NC} ${Y}║${NC}"
    echo -e "${Y}  ╚══════════════════════════════════════╝${NC}"
    echo ""
    echo -e "${GR}  Para rodar um .exe: winedroid run app.exe${NC}"
    echo ""
}

# ─── Parar VNC ────────────────────────────────────────────────────────────────
stop_vnc() {
    info "Parando VNC..."
    proot-distro login ubuntu -- vncserver -kill $VNC_DISPLAY 2>/dev/null || true
    ok "VNC parado"
}

# ─── Rodar .exe ───────────────────────────────────────────────────────────────
run_exe() {
    local exe="$1"
    if [ -z "$exe" ]; then
        err "Especifica um .exe: winedroid run app.exe"
        exit 1
    fi

    # Copia o exe para dentro do proot se for caminho local
    local inner_path="/root/$(basename "$exe")"
    if [ -f "$exe" ]; then
        cp "$exe" "$HOME/../usr/var/lib/proot-distro/installed-rootfs/ubuntu/root/" 2>/dev/null || \
        cp "$exe" "/data/data/com.termux/files/usr/var/lib/proot-distro/installed-rootfs/ubuntu/root/"
    fi

    info "Iniciando $exe com Wine..."
    proot-distro login ubuntu -- bash -c "
        export DISPLAY=$VNC_DISPLAY
        export HOME=/root
        wine '$inner_path' 2>/dev/null &
        echo '  ✓ Iniciado! Veja no VNC Viewer'
    "
}

# ─── Instalar .exe ────────────────────────────────────────────────────────────
install_exe() {
    local exe="$1"
    info "Instalando $exe..."
    run_exe "$exe"
}

# ─── Status ───────────────────────────────────────────────────────────────────
status() {
    echo ""
    echo -e "${W}  Status WineDroid${NC}\n"

    # VNC rodando?
    if proot-distro login ubuntu -- vncserver -list 2>/dev/null | grep -q "$VNC_DISPLAY"; then
        echo -e "  VNC:   ${G}● rodando${NC} (porta $VNC_PORT)"
    else
        echo -e "  VNC:   ${R}○ parado${NC}"
    fi

    # Wine version
    local wine_ver
    wine_ver=$(proot-distro login ubuntu -- wine --version 2>/dev/null || echo "não instalado")
    echo -e "  Wine:  ${C}$wine_ver${NC}"

    # Ubuntu
    echo -e "  proot: ${G}ubuntu 22.04${NC}"
    echo ""
}

# ─── Full install ─────────────────────────────────────────────────────────────
full_install() {
    banner
    echo -e "${W}  Instalação completa — pode demorar 10-20 minutos${NC}"
    echo -e "${GR}  Log em: $LOG${NC}\n"

    install_termux_deps
    install_distro
    generate_setup_script

    # Copia script para dentro do rootfs
    local rootfs="/data/data/com.termux/files/usr/var/lib/proot-distro/installed-rootfs/ubuntu/root"
    mkdir -p "$rootfs" 2>/dev/null || true
    cp "$HOME/winedroid-setup-inner.sh" "$rootfs/" 2>/dev/null || true

    run_inner_setup
    start_vnc

    # Salva como instalado
    echo "installed=true" > "$HOME/.winedroid.conf"
    echo "vnc_port=$VNC_PORT" >> "$HOME/.winedroid.conf"
    echo "vnc_passwd=$VNC_PASSWD" >> "$HOME/.winedroid.conf"
}

# ─── Entry point ──────────────────────────────────────────────────────────────
CMD="${1:-}"

case "$CMD" in
    install)
        full_install
        ;;
    start)
        banner
        start_vnc
        ;;
    stop)
        stop_vnc
        ;;
    run)
        run_exe "$2"
        ;;
    install-app)
        install_exe "$2"
        ;;
    status)
        banner
        status
        ;;
    shell)
        info "Entrando no shell Ubuntu..."
        proot-distro login ubuntu
        ;;
    passwd)
        VNC_PASSWD="${2:-donut123}"
        proot-distro login ubuntu -- bash -c "echo '$VNC_PASSWD' | vncpasswd -f > ~/.vnc/passwd && chmod 600 ~/.vnc/passwd"
        ok "Senha VNC alterada para: $VNC_PASSWD"
        ;;
    ""|help)
        banner
        echo -e "${W}  Comandos:${NC}\n"
        echo -e "  ${C}winedroid install${NC}          Instala tudo (primeira vez)"
        echo -e "  ${C}winedroid start${NC}            Inicia o servidor VNC"
        echo -e "  ${C}winedroid stop${NC}             Para o servidor VNC"
        echo -e "  ${C}winedroid run${NC} app.exe      Roda um .exe no Wine"
        echo -e "  ${C}winedroid install-app${NC} x.exe Instala um .exe"
        echo -e "  ${C}winedroid status${NC}           Status do ambiente"
        echo -e "  ${C}winedroid shell${NC}            Shell dentro do Ubuntu"
        echo -e "  ${C}winedroid passwd${NC} <senha>   Muda senha do VNC"
        echo ""
        echo -e "${GR}  Primeira vez? Execute: winedroid install${NC}"
        echo ""
        ;;
    *)
        err "Comando desconhecido: $CMD"
        echo -e "${GR}  Use: winedroid help${NC}"
        exit 1
        ;;
esac
