"""
Script pour définir la date de lancement en heure de Paris
"""
import sys
from datetime import datetime
import mysql.connector
from python.db_config import DB_CONFIG

def get_db_connection():
    """Crée une connexion à la base de données"""
    return mysql.connector.connect(**DB_CONFIG)

def set_launch_date(date_str: str):
    """
    Définit la date de lancement du jeu en heure de Paris
    Format: YYYY-MM-DD HH:MM (ex: 2026-02-08 18:00)
    """
    try:
        # Parser la date en heure de Paris (locale)
        launch_dt = datetime.strptime(date_str, "%Y-%m-%d %H:%M")
        
        # Formater pour MySQL (sans timezone, sera interprété comme heure locale par le client)
        launch_str = launch_dt.strftime("%Y-%m-%dT%H:%M:%S")
        
        print(f"🚀 Configuration de la date de lancement:")
        print(f"   Date/Heure (Paris): {launch_dt.strftime('%d/%m/%Y à %H:%M')}")
        print(f"   Format stocké: {launch_str}")
        
        conn = get_db_connection()
        cursor = conn.cursor()
        
        # Vérifier si la configuration existe
        cursor.execute(
            "SELECT config_value FROM app_config WHERE config_key = 'launch_date'"
        )
        existing = cursor.fetchone()
        
        if existing:
            cursor.execute(
                "UPDATE app_config SET config_value = %s WHERE config_key = 'launch_date'",
                (launch_str,)
            )
            print("✅ Date de lancement mise à jour")
        else:
            cursor.execute(
                "INSERT INTO app_config (config_key, config_value) VALUES ('launch_date', %s)",
                (launch_str,)
            )
            print("✅ Date de lancement créée")
        
        conn.commit()
        cursor.close()
        conn.close()
        
        print(f"\n💡 Le jeu sera accessible après le {launch_dt.strftime('%d/%m/%Y à %H:%M')} (heure de Paris)")
        print("   Avant cette date, les utilisateurs verront un écran de pré-lancement avec compte à rebours.")
        
    except ValueError as e:
        print(f"❌ Format de date invalide: {e}")
        print("   Utilisez le format: YYYY-MM-DD HH:MM")
        print("   Exemple: 2026-02-08 18:00")
        sys.exit(1)
    except Exception as e:
        print(f"❌ Erreur: {e}")
        sys.exit(1)

def get_current_launch_date():
    """Affiche la date de lancement actuelle"""
    try:
        conn = get_db_connection()
        cursor = conn.cursor()
        
        cursor.execute(
            "SELECT config_value FROM app_config WHERE config_key = 'launch_date'"
        )
        result = cursor.fetchone()
        
        cursor.close()
        conn.close()
        
        if result and result[0] and result[0] != "unset":
            launch_str = result[0]
            try:
                # Parser la date
                if "T" in launch_str:
                    launch_dt = datetime.strptime(launch_str.replace("Z", ""), "%Y-%m-%dT%H:%M:%S")
                else:
                    launch_dt = datetime.strptime(launch_str, "%Y-%m-%d %H:%M:%S")
                
                print(f"📅 Date de lancement actuelle:")
                print(f"   {launch_dt.strftime('%d/%m/%Y à %H:%M')} (heure de Paris)")
                print(f"   Format brut: {launch_str}")
                
                # Comparer avec maintenant
                now = datetime.now()
                if launch_dt > now:
                    diff = launch_dt - now
                    hours = diff.total_seconds() / 3600
                    print(f"\n⏳ Le jeu se lancera dans {hours:.1f} heures")
                else:
                    print("\n✅ Le jeu est déjà accessible")
                    
            except ValueError:
                print(f"⚠️  Date stockée: {launch_str} (format non standard)")
        else:
            print("ℹ️  Aucune date de lancement définie ou définie à 'unset'")
            print("   Le jeu est accessible immédiatement")
            
    except Exception as e:
        print(f"❌ Erreur: {e}")
        sys.exit(1)

if __name__ == "__main__":
    if len(sys.argv) < 2:
        print("Usage:")
        print("  python set_launch_date_paris.py <date> <heure>")
        print("  python set_launch_date_paris.py show")
        print("")
        print("Exemples:")
        print("  python set_launch_date_paris.py 2026-02-08 18:00")
        print("  python set_launch_date_paris.py 2026-02-10 20:30")
        print("  python set_launch_date_paris.py show")
        print("")
        get_current_launch_date()
        sys.exit(0)
    
    if sys.argv[1].lower() == "show":
        get_current_launch_date()
    elif len(sys.argv) == 3:
        date_time_str = f"{sys.argv[1]} {sys.argv[2]}"
        set_launch_date(date_time_str)
    else:
        print("❌ Arguments invalides")
        print("Usage: python set_launch_date_paris.py YYYY-MM-DD HH:MM")
        sys.exit(1)
