#!/bin/bash

set -e

echo "🚀 Build APK - Compagnon du Lagon"
echo "=================================="
echo ""

# Couleurs pour les messages
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Vérifier qu'on est dans le bon répertoire
if [ ! -f "package.json" ]; then
    echo "❌ Erreur: Exécutez ce script depuis la racine du projet"
    exit 1
fi

# Étape 1: Créer la configuration Next.js pour l'export statique
echo -e "${BLUE}📦 Étape 1/6: Configuration Next.js pour export statique${NC}"
cat > next.config.export.js << 'EOF'
/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  swcMinify: true,
  output: "export",
  compress: true,
  poweredByHeader: false,
  images: {
    unoptimized: true,
  },
};

module.exports = nextConfig;
EOF

# Copier la config pour le build
cp next.config.export.js next.config.js

echo -e "${GREEN}✅ Configuration créée${NC}"
echo ""

# Étape 2: Installer les dépendances si nécessaire
echo -e "${BLUE}📦 Étape 2/6: Vérification des dépendances${NC}"

# Vérifier SDKMAN
if [ ! -f "$HOME/.sdkman/bin/sdkman-init.sh" ]; then
    echo "SDKMAN non trouvé. Installation..."
    curl -s "https://get.sdkman.io" | bash
fi

# Initialiser SDKMAN
source "$HOME/.sdkman/bin/sdkman-init.sh"

# Vérifier Java 21
if ! sdk current java 2>&1 | grep -q "21.0"; then
    echo "Installation de Java 21 (requis par Capacitor)..."
    sdk install java 21.0.1-tem
    sdk use java 21.0.1-tem
fi

# Vérifier Android SDK
if [ ! -d "$HOME/Android/Sdk" ]; then
    echo "Installation d'Android SDK..."
    mkdir -p "$HOME/Android/Sdk/cmdline-tools"
    cd "$HOME/Android/Sdk/cmdline-tools"
    wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip
    unzip -q commandlinetools-linux-9477386_latest.zip
    mv cmdline-tools latest
    rm commandlinetools-linux-9477386_latest.zip
    cd -
    
    export ANDROID_HOME="$HOME/Android/Sdk"
    export PATH="$ANDROID_HOME/cmdline-tools/latest/bin:$PATH"
    yes | sdkmanager --licenses || true
    sdkmanager "platform-tools" "platforms;android-34" "build-tools;34.0.0"
fi

if [ ! -d "node_modules" ]; then
    echo "Installation des dépendances Node.js..."
    npm install --include=dev
else
    echo "Dépendances Node.js déjà installées"
fi

# Installer Capacitor si nécessaire
if ! npm list @capacitor/core > /dev/null 2>&1; then
    echo "Installation de Capacitor..."
    npm install @capacitor/core @capacitor/cli @capacitor/android
fi

echo -e "${GREEN}✅ Dépendances OK${NC}"
echo ""

# Étape 3: Build Next.js
echo -e "${BLUE}📦 Étape 3/6: Build Next.js (export statique)${NC}"
rm -rf .next out

# Exclure temporairement les routes API pour l'export statique
if [ -d "app/api" ]; then
    echo "Exclusion temporaire des routes API..."
    mv app/api /tmp/api-backup-$$
    echo -e "${GREEN}✅ Routes API déplacées temporairement${NC}"
fi

if npm run build; then
    echo -e "${GREEN}✅ Build Next.js réussi${NC}"
else
    echo -e "${YELLOW}⚠️  Build avec avertissements, continuation...${NC}"
    npm run build -- --no-lint || true
fi

# Restaurer les routes API
if [ -d "/tmp/api-backup-$$" ]; then
    mv /tmp/api-backup-$$ app/api
    echo -e "${GREEN}✅ Routes API restaurées${NC}"
fi

echo ""

# Vérifier que le dossier out existe
if [ ! -d "out" ]; then
    echo "❌ Erreur: Le dossier 'out' n'a pas été créé"
    exit 1
fi

# Étape 4: Initialiser/Configurer Capacitor
echo -e "${BLUE}📦 Étape 4/6: Configuration Capacitor${NC}"

# Initialiser Capacitor si nécessaire
if [ ! -f "capacitor.config.ts" ]; then
    echo "Initialisation de Capacitor..."
    npx cap init "Compagnon du Lagon" com.pensionmarama.app --web-dir=out
else
    echo "Capacitor déjà initialisé"
    # Mettre à jour la config pour pointer vers out
    cat > capacitor.config.ts << 'EOF'
import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.pensionmarama.app',
  appName: 'Compagnon du Lagon',
  webDir: 'out',
  server: {
    androidScheme: 'https'
  }
};

export default config;
EOF
fi

# Ajouter la plateforme Android si nécessaire
if [ ! -d "android" ]; then
    echo "Ajout de la plateforme Android..."
    npx cap add android
else
    echo "Plateforme Android déjà présente"
fi

echo -e "${GREEN}✅ Capacitor configuré${NC}"
echo ""

# Étape 5: Synchroniser les assets
echo -e "${BLUE}📦 Étape 5/6: Synchronisation des assets${NC}"
npx cap sync android
echo -e "${GREEN}✅ Assets synchronisés${NC}"
echo ""

# Étape 6: Build l'APK
echo -e "${BLUE}📦 Étape 6/6: Génération de l'APK${NC}"

# Initialiser SDKMAN et configurer Java
source "$HOME/.sdkman/bin/sdkman-init.sh"
sdk use java 21.0.1-tem
export ANDROID_HOME="$HOME/Android/Sdk"

cd android

# Vérifier que gradlew existe et est exécutable
if [ ! -f "./gradlew" ]; then
    echo "❌ Erreur: gradlew n'existe pas"
    exit 1
fi

chmod +x ./gradlew

# Build l'APK
echo "Construction de l'APK debug..."
./gradlew clean assembleDebug

cd ..

# Copier l'APK dans dist/
echo ""
echo -e "${BLUE}📦 Copie de l'APK...${NC}"
mkdir -p dist

if [ -f "android/app/build/outputs/apk/debug/app-debug.apk" ]; then
    cp android/app/build/outputs/apk/debug/app-debug.apk dist/compagnon-lagon-beta.apk
    
    # Afficher les infos
    APK_SIZE=$(du -h dist/compagnon-lagon-beta.apk | cut -f1)
    
    echo ""
    echo -e "${GREEN}========================================${NC}"
    echo -e "${GREEN}✅ APK GÉNÉRÉ AVEC SUCCÈS !${NC}"
    echo -e "${GREEN}========================================${NC}"
    echo ""
    echo -e "📱 Fichier: ${BLUE}dist/compagnon-lagon-beta.apk${NC}"
    echo -e "📊 Taille: ${BLUE}${APK_SIZE}${NC}"
    echo ""
    echo -e "${YELLOW}📤 Pour distribuer aux bêta-testeurs:${NC}"
    echo "   1. Envoyez le fichier dist/compagnon-lagon-beta.apk"
    echo "   2. Demandez-leur d'activer 'Sources inconnues'"
    echo "   3. Installer l'APK sur leur téléphone"
    echo ""
    echo -e "${YELLOW}🔄 Pour mettre à jour:${NC}"
    echo "   Relancez simplement ce script !"
    echo ""
    
else
    echo -e "${RED}❌ Erreur: L'APK n'a pas été généré${NC}"
    echo "Vérifiez les erreurs ci-dessus"
    exit 1
fi

# Restaurer la config Next.js originale si elle existe
if [ -f "next.config.js.backup" ]; then
    mv next.config.js.backup next.config.js
fi

