#!/bin/bash
# ============================================================
# Instalador do Modpack - minecraft.alef.host
# Linux - Suporte: Minecraft Oficial, Prism Launcher, SKLauncher
# Minecraft Forge 1.20.1-47.4.10 + 35 mods
# ============================================================

set -e

FORGE_VERSION="1.20.1-47.4.10"
FORGE_INSTALLER_URL="https://maven.minecraftforge.net/net/minecraftforge/forge/${FORGE_VERSION}/forge-${FORGE_VERSION}-installer.jar"
SERVER_ADDR="minecraft.alef.host"
TMP_DIR="/tmp/mc_installer_$$"

# Cores
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'

clear
echo -e "${CYAN}"
echo "╔════════════════════════════════════════════════════╗"
echo "║     Instalador de Modpack - minecraft.alef.host    ║"
echo "║     Minecraft Forge 1.20.1 + 35 mods               ║"
echo "╚════════════════════════════════════════════════════╝"
echo -e "${NC}"

# ── Escolher launcher ──
echo -e "${BOLD}Qual launcher você usa?${NC}"
echo ""
echo "  1) Minecraft Oficial (Mojang/Microsoft)"
echo "  2) Prism Launcher"
echo "  3) SKLauncher"
echo ""
read -p "Escolha (1/2/3): " LAUNCHER_CHOICE

case "$LAUNCHER_CHOICE" in
    1) LAUNCHER="oficial" ;;
    2) LAUNCHER="prism" ;;
    3) LAUNCHER="sklauncher" ;;
    *)
        echo -e "${RED}Opção inválida.${NC}"
        exit 1
        ;;
esac

# ── Definir caminhos conforme o launcher ──
case "$LAUNCHER" in
    oficial)
        MC_DIR="$HOME/.minecraft"
        MODS_DIR="$MC_DIR/mods"
        INSTALL_FORGE=true
        LAUNCHER_NAME="Minecraft Oficial"
        ;;
    prism)
        PRISM_DIR="$HOME/.local/share/PrismLauncher"
        # Verificar flatpak
        if [ ! -d "$PRISM_DIR" ] && [ -d "$HOME/.var/app/org.prismlauncher.PrismLauncher/data/PrismLauncher" ]; then
            PRISM_DIR="$HOME/.var/app/org.prismlauncher.PrismLauncher/data/PrismLauncher"
        fi
        INSTANCE_NAME="minecraft-alef-host"
        MC_DIR="$PRISM_DIR/instances/$INSTANCE_NAME/.minecraft"
        MODS_DIR="$MC_DIR/mods"
        INSTALL_FORGE=false
        LAUNCHER_NAME="Prism Launcher"
        ;;
    sklauncher)
        MC_DIR="$HOME/.minecraft"
        MODS_DIR="$MC_DIR/mods"
        INSTALL_FORGE=false
        LAUNCHER_NAME="SKLauncher"
        ;;
esac

echo ""
echo -e "${CYAN}Launcher: ${BOLD}$LAUNCHER_NAME${NC}"
echo -e "${CYAN}Pasta de mods: ${BOLD}$MODS_DIR${NC}"
echo ""

# ── Verificar Java ──
echo -e "${YELLOW}[1/4] Verificando Java...${NC}"
if ! command -v java &> /dev/null; then
    echo -e "${RED}Java não encontrado! Instale com:${NC}"
    echo "  sudo apt install openjdk-17-jre   (Debian/Ubuntu)"
    echo "  sudo pacman -S jre-openjdk-17     (Arch)"
    echo "  sudo dnf install java-17-openjdk  (Fedora)"
    exit 1
fi
JAVA_VER=$(java -version 2>&1 | head -n1)
echo -e "  ${GREEN}OK: $JAVA_VER${NC}"

# ── Verificar diretório do Minecraft/Launcher ──
echo -e "${YELLOW}[2/4] Verificando instalação...${NC}"

case "$LAUNCHER" in
    oficial|sklauncher)
        if [ ! -d "$MC_DIR" ]; then
            echo -e "${RED}Pasta $MC_DIR não encontrada!${NC}"
            echo "Abra o $LAUNCHER_NAME e rode o Minecraft 1.20.1 pelo menos uma vez."
            exit 1
        fi
        echo -e "  ${GREEN}OK: $MC_DIR${NC}"
        ;;
    prism)
        if [ ! -d "$PRISM_DIR" ]; then
            echo -e "${RED}Prism Launcher não encontrado em $PRISM_DIR${NC}"
            echo "Instale o Prism Launcher: https://prismlauncher.org/"
            exit 1
        fi
        echo -e "  ${GREEN}OK: $PRISM_DIR${NC}"
        ;;
esac

# ── Instalar/Configurar Forge ──
echo -e "${YELLOW}[3/4] Configurando Forge ${FORGE_VERSION}...${NC}"

case "$LAUNCHER" in
    oficial)
        mkdir -p "$TMP_DIR"
        echo "  Baixando Forge installer..."
        wget -q --show-progress -O "$TMP_DIR/forge-installer.jar" "$FORGE_INSTALLER_URL"
        echo "  Executando installer..."
        ORIG_DIR="$(pwd)"
        cd "$MC_DIR"
        java -jar "$TMP_DIR/forge-installer.jar" --installClient
        cd "$ORIG_DIR"
        echo -e "  ${GREEN}Forge instalado!${NC}"
        ;;
    prism)
        # Criar instância do Prism Launcher
        INSTANCE_DIR="$PRISM_DIR/instances/$INSTANCE_NAME"
        mkdir -p "$INSTANCE_DIR/.minecraft/mods"

        # Criar instance.cfg
        cat > "$INSTANCE_DIR/instance.cfg" << 'INSTCFG'
[General]
ConfigVersion=1.2
InstanceType=OneSix
iconKey=default
name=minecraft.alef.host
INSTCFG

        # Criar mmc-pack.json com Forge 1.20.1
        cat > "$INSTANCE_DIR/mmc-pack.json" << 'MMCPACK'
{
    "components": [
        {
            "cachedName": "LWJGL 3",
            "cachedVersion": "3.3.1",
            "cachedVolatile": true,
            "dependencyOnly": true,
            "uid": "org.lwjgl3",
            "version": "3.3.1"
        },
        {
            "cachedName": "Minecraft",
            "cachedVersion": "1.20.1",
            "important": true,
            "uid": "net.minecraft",
            "version": "1.20.1"
        },
        {
            "cachedName": "Forge",
            "cachedVersion": "47.4.10",
            "uid": "net.minecraftforge",
            "version": "47.4.10"
        }
    ],
    "formatVersion": 1
}
MMCPACK

        echo -e "  ${GREEN}Instância criada no Prism Launcher!${NC}"
        echo -e "  ${CYAN}Nome: minecraft.alef.host${NC}"
        ;;
    sklauncher)
        echo -e "  ${YELLOW}O SKLauncher tem Forge integrado.${NC}"
        echo ""
        echo -e "  ${BOLD}Siga estes passos no SKLauncher:${NC}"
        echo "    1. Abra o SKLauncher"
        echo "    2. Vá em 'Installations Manager' (menu esquerdo)"
        echo "    3. Clique 'New Installation'"
        echo "    4. Em tipo de versão, selecione 'Forge'"
        echo "    5. Selecione Minecraft 1.20.1 e Forge 47.4.10"
        echo "    6. Clique 'Save'"
        echo ""
        read -p "  Pressione Enter quando tiver criado a instalação Forge..."
        echo -e "  ${GREEN}OK!${NC}"
        ;;
esac

# ── Baixar mods ──
echo -e "${YELLOW}[4/4] Baixando mods (35 arquivos)...${NC}"
mkdir -p "$MODS_DIR"

# Verificar mods existentes
UPDATE_MODE=false
EXISTING=$(find "$MODS_DIR" -maxdepth 1 -name "*.jar" 2>/dev/null | wc -l)
if [ "$EXISTING" -gt 0 ]; then
    echo -e "  ${YELLOW}Pasta mods tem $EXISTING arquivo(s).${NC}"
    echo ""
    echo "    1) Atualizar (baixar apenas mods novos/faltantes)"
    echo "    2) Reinstalar (backup + baixar tudo)"
    echo ""
    read -p "    Escolha (1/2): " MODE_CHOICE
    if [ "$MODE_CHOICE" = "2" ]; then
        BACKUP_DIR="${MODS_DIR}_backup_$(date +%Y%m%d_%H%M%S)"
        mv "$MODS_DIR" "$BACKUP_DIR"
        mkdir -p "$MODS_DIR"
        echo -e "  ${GREEN}Backup: $BACKUP_DIR${NC}"
    else
        UPDATE_MODE=true
    fi
fi

# Lista de mods (URLs do Modrinth CDN)
declare -A MODS=(
    # === Mods de gameplay (servidor + cliente) ===
    ["create-1.20.1-6.0.8.jar"]="https://cdn.modrinth.com/data/LNytGWDc/versions/8amzvn9x/create-1.20.1-6.0.8.jar"
    ["Quark-4.0-462.jar"]="https://cdn.modrinth.com/data/qnQsVE2z/versions/DijQLauD/Quark-4.0-462.jar"
    ["Zeta-1.0-31.jar"]="https://cdn.modrinth.com/data/MVARlG2f/versions/mSER3jBI/Zeta-1.0-31.jar"
    ["FarmersDelight-1.20.1-1.2.10.jar"]="https://cdn.modrinth.com/data/R2OftAxM/versions/igQdwIqn/FarmersDelight-1.20.1-1.2.10.jar"
    ["alexsmobs-1.22.9.jar"]="https://cdn.modrinth.com/data/2cMuAZAp/versions/XoIASRVU/alexsmobs-1.22.9.jar"
    ["citadel-2.6.3-1.20.1.jar"]="https://cdn.modrinth.com/data/jJfV67b1/versions/lTAAe4sZ/citadel-2.6.3-1.20.1.jar"
    ["supplementaries-1.20-3.1.42-forge.jar"]="https://cdn.modrinth.com/data/fFEIiSDQ/versions/KgkjZ2z3/supplementaries-1.20-3.1.42-forge.jar"
    ["moonlight-1.20-2.16.28-forge.jar"]="https://cdn.modrinth.com/data/twkfQtEc/versions/4f5Vm2TE/moonlight-1.20-2.16.28-forge.jar"
    ["BiomesOPlenty-forge-1.20.1-19.0.0.96.jar"]="https://cdn.modrinth.com/data/HXF82T3G/versions/jxUqRzSD/BiomesOPlenty-forge-1.20.1-19.0.0.96.jar"
    ["TerraBlender-forge-1.20.1-3.0.1.10.jar"]="https://cdn.modrinth.com/data/kkmrDlKT/versions/zGconCHG/TerraBlender-forge-1.20.1-3.0.1.10.jar"
    ["GlitchCore-forge-1.20.1-0.0.1.1.jar"]="https://cdn.modrinth.com/data/s3dmwKy5/versions/pYPZ5MNI/GlitchCore-forge-1.20.1-0.0.1.1.jar"
    ["journeymap-1.20.1-5.10.3-forge.jar"]="https://cdn.modrinth.com/data/lfHFW1mp/versions/r7FWVNCs/journeymap-1.20.1-5.10.3-forge.jar"
    ["waystones-forge-1.20.1-14.1.20.jar"]="https://cdn.modrinth.com/data/LOpKHB2A/versions/sKoHLGbK/waystones-forge-1.20.1-14.1.20.jar"
    ["balm-forge-1.20.1-7.3.38-all.jar"]="https://cdn.modrinth.com/data/MBAkmtvl/versions/8rz04Kha/balm-forge-1.20.1-7.3.38-all.jar"
    ["ironchest-1.20.1-14.4.4.jar"]="https://cdn.modrinth.com/data/P3iIrPH3/versions/YjbOtYwN/ironchest-1.20.1-14.4.4.jar"
    ["sophisticatedbackpacks-1.20.1-3.24.24.1538.jar"]="https://cdn.modrinth.com/data/TyCTlI4b/versions/5hqZZ6lY/sophisticatedbackpacks-1.20.1-3.24.24.1538.jar"
    ["sophisticatedcore-1.20.1-1.3.5.1505.jar"]="https://cdn.modrinth.com/data/nmoqTijg/versions/csa9YQ6L/sophisticatedcore-1.20.1-1.3.5.1505.jar"
    ["amendments-1.20-2.2.5.jar"]="https://cdn.modrinth.com/data/6iTJugQR/versions/73W8UHX3/amendments-1.20-2.2.5.jar"
    ["alexscaves-2.0.2.jar"]="https://cdn.modrinth.com/data/U6GY0xp0/versions/lC8HHXOF/alexscaves-2.0.2.jar"
    ["Vampirism-1.20.1-1.10.13.jar"]="https://cdn.modrinth.com/data/jVZ0F1wn/versions/dBEdKX9l/Vampirism-1.20.1-1.10.13.jar"
    ["Werewolves-1.20.1-2.0.2.7.jar"]="https://cdn.modrinth.com/data/3ElBohKg/versions/BqwSKnfY/Werewolves-1.20.1-2.0.2.7.jar"
    ["iceandfire-2.1.13-1.20.1-beta-5.jar"]="https://cdn.modrinth.com/data/LVnvHVBp/versions/EzN8KQYF/iceandfire-2.1.13-1.20.1-beta-5.jar"
    ["ctov.jar"]="https://www.curseforge.com/api/v1/mods/623908/files/7732916/download"
    # === Mods client-side (visuais + performance) ===
    ["CustomSkinLoader_ForgeV2-14.27.jar"]="https://cdn.modrinth.com/data/idMHQ4n2/versions/dcitd3cL/CustomSkinLoader_ForgeV2-14.27.jar"
    ["embeddium-0.3.31+mc1.20.1.jar"]="https://cdn.modrinth.com/data/sk9rgfiA/versions/UTbfe5d1/embeddium-0.3.31%2Bmc1.20.1.jar"
    ["modernfix-forge-5.26.2+mc1.20.1.jar"]="https://cdn.modrinth.com/data/nmDcB62a/versions/Uvlhuprw/modernfix-forge-5.26.2%2Bmc1.20.1.jar"
    ["ferritecore-6.0.1-forge.jar"]="https://cdn.modrinth.com/data/uXXizFIs/versions/DG5Fn9Sz/ferritecore-6.0.1-forge.jar"
    ["entityculling-forge-1.9.5-mc1.20.1.jar"]="https://cdn.modrinth.com/data/NNAgCjsB/versions/ZqOeqW60/entityculling-forge-1.9.5-mc1.20.1.jar"
    ["oculus-mc1.20.1-1.8.0.jar"]="https://cdn.modrinth.com/data/GchcoXML/versions/iQ1SwGc3/oculus-mc1.20.1-1.8.0.jar"
    ["notenoughanimations-forge-1.11.3-mc1.20.1.jar"]="https://cdn.modrinth.com/data/MPCX6s5C/versions/ysVImGiU/notenoughanimations-forge-1.11.3-mc1.20.1.jar"
    ["BetterAnimationsCollection-v8.0.1-1.20.1-Forge.jar"]="https://cdn.modrinth.com/data/OoOVj3J3/versions/3V51q1QN/BetterAnimationsCollection-v8.0.1-1.20.1-Forge.jar"
    ["PuzzlesLib-v8.1.33-1.20.1-Forge.jar"]="https://cdn.modrinth.com/data/QAGBst4M/versions/mIyVGf3d/PuzzlesLib-v8.1.33-1.20.1-Forge.jar"
    ["entity_texture_features_1.20.1-forge-7.0.9.jar"]="https://cdn.modrinth.com/data/BVzZfTc1/versions/rk8qfZ88/entity_texture_features_1.20.1-forge-7.0.9.jar"
    ["entity_model_features_1.20.1-forge-3.0.12.jar"]="https://cdn.modrinth.com/data/4I1XuqiY/versions/Q2IpTAPW/entity_model_features_1.20.1-forge-3.0.12.jar"
    ["sound-physics-remastered-forge-1.20.1-1.5.1.jar"]="https://cdn.modrinth.com/data/qyVF9oeo/versions/x0sJ9PeR/sound-physics-remastered-forge-1.20.1-1.5.1.jar"
)

COUNT=0
TOTAL=${#MODS[@]}
ERRORS=0
SKIPPED=0

for FILE in "${!MODS[@]}"; do
    COUNT=$((COUNT + 1))
    URL="${MODS[$FILE]}"
    DEST="$MODS_DIR/$FILE"
    printf "  [%2d/%d] %s... " "$COUNT" "$TOTAL" "$FILE"

    # No modo atualização, pular mods que já existem
    if [ "$UPDATE_MODE" = true ] && [ -f "$DEST" ]; then
        echo -e "\033[90mJÁ EXISTE${NC}"
        SKIPPED=$((SKIPPED + 1))
        continue
    fi

    if wget -q --user-agent="minecraft-alef-host/1.0" -O "$DEST" "$URL" 2>/dev/null; then
        echo -e "${GREEN}OK${NC}"
    else
        echo -e "${RED}ERRO${NC}"
        ERRORS=$((ERRORS + 1))
    fi
done

# Limpar temporários
rm -rf "$TMP_DIR"

# ── Configurar CustomSkinLoader ──
echo -e "${YELLOW}Configurando CustomSkinLoader...${NC}"
CSL_DIR="$MC_DIR/CustomSkinLoader"
mkdir -p "$CSL_DIR"
cat > "$CSL_DIR/CustomSkinLoader.json" << 'CSLCFG'
{
  "version": "14.27",
  "loadlist": [
    {
      "name": "AlefHost",
      "type": "Legacy",
      "checkPNG": true,
      "skin": "https://minecraft.alef.host/skins/{USERNAME}.png",
      "model": "auto"
    },
    {
      "name": "Mojang",
      "type": "MojangAPI",
      "apiRoot": "https://api.mojang.com/",
      "sessionRoot": "https://sessionserver.mojang.com/"
    },
    {
      "name": "LocalSkin",
      "type": "Legacy",
      "checkPNG": false,
      "skin": "LocalSkin/skins/{USERNAME}.png",
      "model": "auto",
      "cape": "LocalSkin/capes/{USERNAME}.png",
      "elytra": "LocalSkin/elytras/{USERNAME}.png"
    }
  ],
  "enableDynamicSkull": true,
  "enableTransparentSkin": true,
  "forceLoadAllTextures": true,
  "enableCape": true,
  "threadPoolSize": 8,
  "cacheExpiry": 30
}
CSLCFG
echo -e "  ${GREEN}Skins do servidor configuradas como prioridade!${NC}"

# ── Resultado ──
DOWNLOADED=$((TOTAL - SKIPPED - ERRORS))
echo ""
echo -e "${CYAN}════════════════════════════════════════════════════${NC}"
if [ $ERRORS -eq 0 ]; then
    if [ $SKIPPED -gt 0 ]; then
        echo -e "${GREEN}Atualizado! ($DOWNLOADED novos, $SKIPPED já existiam)${NC}"
    else
        echo -e "${GREEN}Instalação concluída com sucesso! ($TOTAL mods)${NC}"
    fi
else
    echo -e "${YELLOW}Concluído com $ERRORS erro(s). ($DOWNLOADED baixados, $SKIPPED existentes)${NC}"
    echo "  Verifique os mods que falharam e baixe manualmente do modrinth.com"
fi
echo ""
echo -e "${BOLD}Próximos passos:${NC}"

case "$LAUNCHER" in
    oficial)
        echo "  1. Abra o Minecraft Launcher"
        echo "  2. Selecione o perfil 'Forge 1.20.1'"
        echo "  3. Clique em Jogar"
        ;;
    prism)
        echo "  1. Abra o Prism Launcher"
        echo "  2. A instância 'minecraft.alef.host' já foi criada"
        echo "  3. Clique duas vezes para iniciar"
        echo "     (o Forge será baixado automaticamente no primeiro launch)"
        ;;
    sklauncher)
        echo "  1. Abra o SKLauncher"
        echo "  2. Selecione a instalação Forge 1.20.1 que você criou"
        echo "  3. Clique em Jogar"
        ;;
esac

echo ""
echo "  Depois no jogo:"
echo "    Multiplayer > Add Server"
echo "    Endereço: $SERVER_ADDR"
echo ""
echo -e "${CYAN}════════════════════════════════════════════════════${NC}"
