#!/bin/bash

# ============================================================================
# Script de correction du package nfc_manager 3.3.0 pour Android Gradle Plugin 8+
# ============================================================================
#
# Problème :
# nfc_manager 3.3.0 utilise l'ancien format 'package="..."' dans AndroidManifest.xml
# et ne déclare pas de namespace dans build.gradle (requis par AGP 8+)
#
# Solution :
# 1. Supprime l'attribut package="io.flutter.plugins.nfcmanager" du AndroidManifest.xml
# 2. Ajoute namespace 'io.flutter.plugins.nfc_manager' dans build.gradle
#
# Usage :
# ./fix-nfc-manager.sh
#
# Historique :
# 14/10/2025 - Création du script pour résoudre compilation Android
# ============================================================================

set -e

# Détection de l'OS pour la syntaxe sed
if [[ "$OSTYPE" == "darwin"* ]]; then
    # macOS (BSD sed)
    SED_INPLACE="sed -i ''"
else
    # Linux (GNU sed)
    SED_INPLACE="sed -i"
fi

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

echo_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

echo_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

echo_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

echo_step() {
    echo -e "${BLUE}[STEP]${NC} $1"
}

# Chemins vers les fichiers de nfc_manager 3.3.0
# Utilise $PUB_CACHE si défini (cache local projet), sinon $HOME/.pub-cache
PUB_CACHE_BASE="${PUB_CACHE:-$HOME/.pub-cache}"
NFC_DIR="${PUB_CACHE_BASE}/hosted/pub.dev/nfc_manager-3.3.0/android"
NFC_MANIFEST="${NFC_DIR}/src/main/AndroidManifest.xml"
NFC_BUILD_GRADLE="${NFC_DIR}/build.gradle"
NFC_TRANSLATOR="${NFC_DIR}/src/main/kotlin/io/flutter/plugins/nfcmanager/Translator.kt"

echo_info "=========================================="
echo_info "  nfc_manager 3.3.0 - Android Patch"
echo_info "=========================================="
echo ""

# Vérifier si les fichiers existent
if [ ! -f "$NFC_MANIFEST" ]; then
    echo_error "Fichier AndroidManifest.xml introuvable"
    echo_error "Chemin attendu: $NFC_MANIFEST"
    echo ""
    echo_info "Exécutez 'flutter pub get' d'abord"
    exit 1
fi

if [ ! -f "$NFC_BUILD_GRADLE" ]; then
    echo_error "Fichier build.gradle introuvable"
    echo_error "Chemin attendu: $NFC_BUILD_GRADLE"
    exit 1
fi

if [ ! -f "$NFC_TRANSLATOR" ]; then
    echo_error "Fichier Translator.kt introuvable"
    echo_error "Chemin attendu: $NFC_TRANSLATOR"
    exit 1
fi

echo_info "Fichiers trouvés:"
echo_info "  - AndroidManifest.xml: $NFC_MANIFEST"
echo_info "  - build.gradle: $NFC_BUILD_GRADLE"
echo_info "  - Translator.kt: $NFC_TRANSLATOR"
echo ""

# ===========================================
# ÉTAPE 1 : Patcher AndroidManifest.xml
# ===========================================
echo_step "Étape 1/2 : Patch AndroidManifest.xml"
echo ""

if grep -q 'package="io.flutter.plugins.nfcmanager"' "$NFC_MANIFEST"; then
    echo_warning "Attribut 'package' détecté dans AndroidManifest.xml"

    # Créer une sauvegarde
    BACKUP_MANIFEST="${NFC_MANIFEST}.backup"
    if [ ! -f "$BACKUP_MANIFEST" ]; then
        cp "$NFC_MANIFEST" "$BACKUP_MANIFEST"
        echo_info "Sauvegarde créée: ${BACKUP_MANIFEST}"
    fi

    # Appliquer le patch (compatible Linux + macOS)
    eval "$SED_INPLACE 's/ package=\"io.flutter.plugins.nfcmanager\"//g' \"$NFC_MANIFEST\""

    # Vérifier
    if ! grep -q 'package="io.flutter.plugins.nfcmanager"' "$NFC_MANIFEST"; then
        echo_info "✅ AndroidManifest.xml patché avec succès"
    else
        echo_error "❌ Échec du patch AndroidManifest.xml"
        exit 1
    fi
else
    echo_info "✅ AndroidManifest.xml déjà patché"
fi
echo ""

# ===========================================
# ÉTAPE 2 : Patcher build.gradle
# ===========================================
echo_step "Étape 2/2 : Patch build.gradle"
echo ""

if grep -q "namespace 'io.flutter.plugins.nfc_manager'" "$NFC_BUILD_GRADLE"; then
    echo_info "✅ build.gradle déjà patché (namespace présent)"
else
    echo_warning "Namespace manquant dans build.gradle"

    # Créer une sauvegarde
    BACKUP_GRADLE="${NFC_BUILD_GRADLE}.backup"
    if [ ! -f "$BACKUP_GRADLE" ]; then
        cp "$NFC_BUILD_GRADLE" "$BACKUP_GRADLE"
        echo_info "Sauvegarde créée: ${BACKUP_GRADLE}"
    fi

    # Appliquer le patch : ajouter namespace après "android {" (compatible Linux + macOS)
    if [[ "$OSTYPE" == "darwin"* ]]; then
        # macOS : nécessite un retour à la ligne explicite
        sed -i '' "/^android {$/a\\
    namespace 'io.flutter.plugins.nfc_manager'
" "$NFC_BUILD_GRADLE"
    else
        # Linux : syntaxe différente
        sed -i "/^android {$/a\\    namespace 'io.flutter.plugins.nfc_manager'" "$NFC_BUILD_GRADLE"
    fi

    # Vérifier
    if grep -q "namespace 'io.flutter.plugins.nfc_manager'" "$NFC_BUILD_GRADLE"; then
        echo_info "✅ build.gradle patché avec succès (namespace ajouté)"
    else
        echo_error "❌ Échec du patch build.gradle"
        # Restaurer le backup
        mv "$BACKUP_GRADLE" "$NFC_BUILD_GRADLE"
        exit 1
    fi
fi
echo ""

# ===========================================
# ÉTAPE 3 : Patcher Translator.kt (Kotlin)
# ===========================================
echo_step "Étape 3/3 : Patch Translator.kt (fix Kotlin deprecated)"
echo ""

if grep -q '\.toLowerCase(' "$NFC_TRANSLATOR"; then
    echo_warning "Méthode dépréciée 'toLowerCase()' détectée dans Translator.kt"

    # Créer une sauvegarde
    BACKUP_TRANSLATOR="${NFC_TRANSLATOR}.backup"
    if [ ! -f "$BACKUP_TRANSLATOR" ]; then
        cp "$NFC_TRANSLATOR" "$BACKUP_TRANSLATOR"
        echo_info "Sauvegarde créée: ${BACKUP_TRANSLATOR}"
    fi

    # Appliquer le patch : remplacer toLowerCase par lowercase (compatible Linux + macOS)
    eval "$SED_INPLACE 's/\\.toLowerCase(/\\.lowercase(/g' \"$NFC_TRANSLATOR\""

    # Vérifier
    if ! grep -q '\.toLowerCase(' "$NFC_TRANSLATOR"; then
        echo_info "✅ Translator.kt patché avec succès (toLowerCase → lowercase)"
    else
        echo_error "❌ Échec du patch Translator.kt"
        # Restaurer le backup
        mv "$BACKUP_TRANSLATOR" "$NFC_TRANSLATOR"
        exit 1
    fi
else
    echo_info "✅ Translator.kt déjà patché (pas de toLowerCase)"
fi
echo ""

echo_info "=========================================="
echo_info "  ✅ Patch terminé avec succès!"
echo_info "=========================================="
echo ""
echo_info "Modifications appliquées:"
echo_info "  1. AndroidManifest.xml - Attribut 'package' supprimé"
echo_info "  2. build.gradle - Namespace ajouté"
echo_info "  3. Translator.kt - toLowerCase() → lowercase()"
echo ""
echo_info "Vous pouvez maintenant compiler Android:"
echo_info "  ./android.sh"
echo ""

exit 0
