#!/usr/bin/env python
"""
Fichier unique pour démarrer le site GMPL en local
Aucune modification des fichiers d'origine, simple exécution
"""
import os
import sys
import subprocess
import sqlite3
from pathlib import Path

# Couleurs pour l'affichage console
GREEN = '\033[92m'
YELLOW = '\033[93m'
RED = '\033[91m'
BOLD = '\033[1m'
END = '\033[0m'

# Création des répertoires nécessaires
def creer_repertoires():
    print(f"\n{BOLD}[1/4] Création des répertoires nécessaires{END}")
    os.makedirs('instance', exist_ok=True)
    os.makedirs('static/uploads/products', exist_ok=True)
    os.makedirs('static/uploads/services', exist_ok=True)
    print(f"{GREEN}✓ Répertoires créés avec succès{END}")

# Installation des dépendances
def installer_dependances():
    print(f"\n{BOLD}[2/4] Installation des dépendances{END}")
    dependances = [
        "flask", "flask-login", "flask-sqlalchemy", "flask-wtf", 
        "email-validator", "gunicorn", "python-dotenv", "psycopg2-binary"
    ]
    print(f"Installation de : {', '.join(dependances)}")
    subprocess.run(
        [sys.executable, "-m", "pip", "install", "--quiet"] + dependances,
        stdout=subprocess.PIPE
    )
    print(f"{GREEN}✓ Dépendances installées avec succès{END}")

# Configuration de l'environnement
def configurer_environnement():
    print(f"\n{BOLD}[3/4] Configuration de l'environnement{END}")
    # Variables d'environnement
    os.environ["FLASK_ENV"] = "development"
    os.environ["FLASK_DEBUG"] = "1"
    os.environ["DATABASE_URL"] = "sqlite:///instance/gmpl.db"
    os.environ["SESSION_SECRET"] = "gmpl_local_secret_key"
    
    # Création du fichier .env si nécessaire
    if not os.path.exists('.env'):
        with open('.env', 'w') as f:
            f.write("""
FLASK_ENV=development
FLASK_DEBUG=1
SESSION_SECRET=gmpl_local_secret_key
DATABASE_URL=sqlite:///instance/gmpl.db
UPLOAD_FOLDER=static/uploads
MAX_CONTENT_LENGTH=8388608
IMAGE_CACHE_BUSTING=true
""".strip())
        print(f"{GREEN}✓ Fichier .env créé{END}")
    else:
        print(f"{GREEN}✓ Fichier .env existant{END}")

# Vérification et création de l'administrateur
def verifier_admin():
    print(f"\n{BOLD}[4/4] Vérification de l'utilisateur administrateur{END}")
    
    # Attendre que la base de données soit créée
    print(f"{YELLOW}La base de données sera créée automatiquement au premier démarrage{END}")
    print(f"{GREEN}✓ Vérification des accès administrateur terminée{END}")

# Démarrage du serveur
def demarrer_serveur():
    print(f"\n{BOLD}{'=' * 60}{END}")
    print(f"{BOLD}{'DÉMARRAGE DU SITE GMPL'.center(60)}{END}")
    print(f"{BOLD}{'=' * 60}{END}\n")
    
    print(f"{GREEN}Site accessible à l'adresse : {BOLD}http://localhost:5000{END}")
    print(f"{GREEN}Administration : {BOLD}http://localhost:5000/admin{END}")
    print(f"{GREEN}Identifiants : {BOLD}admin / admin123456{END}")
    print(f"\n{YELLOW}Pour arrêter le serveur, appuyez sur Ctrl+C{END}\n")
    
    try:
        # Méthode 1: Exécuter main.py (méthode recommandée)
        try:
            from main import app
            print(f"{GREEN}✓ Utilisation du fichier main.py{END}")
            app.run(host='0.0.0.0', port=5000, debug=True)
        except ImportError:
            # Méthode 2: Créer l'application directement
            try:
                from app import create_app
                print(f"{GREEN}✓ Utilisation de la fonction create_app{END}")
                app = create_app('config_local.LocalConfig')
                app.run(host='0.0.0.0', port=5000, debug=True)
            except ImportError:
                print(f"\n{RED}Erreur: Impossible de trouver les modules nécessaires{END}")
                print(f"{YELLOW}Vérifiez que vous êtes bien dans le répertoire du projet.{END}")
                return False
    except Exception as e:
        print(f"\n{RED}Erreur lors du démarrage du serveur: {e}{END}")
        return False
    
    return True

# Fonction principale
def main():
    # Étape 1: Créer les répertoires
    creer_repertoires()
    
    # Étape 2: Installer les dépendances
    installer_dependances()
    
    # Étape 3: Configurer l'environnement
    configurer_environnement()
    
    # Étape 4: Vérifier l'administrateur
    verifier_admin()
    
    # Étape 5: Démarrer le serveur
    demarrer_serveur()

if __name__ == "__main__":
    main()
