#!/usr/bin/env python3
"""Script pour synchroniser la licence avec la base de données utilisateur."""

import json
import sqlite3
import sys
from datetime import datetime, timezone, timedelta
from pathlib import Path

# Ajouter le package principal au path
sys.path.insert(0, str(Path(__file__).parent.parent))

def sync_license_from_database():
    """Créer un fichier licence basé sur les données de la base utilisateur."""
    
    # Connecter à la base de données
    db_path = Path.home() / ".web-sentinel" / "auth.db"
    if not db_path.exists():
        print(f"❌ Base de données non trouvée : {db_path}")
        return False
        
    # Récupérer les informations utilisateur
    with sqlite3.connect(db_path) as conn:
        # Récupérer l'utilisateur principal (premier dans la liste)
        cursor = conn.execute("""
            SELECT u.id, u.email, u.username, us.tier, us.expires_at 
            FROM users u 
            LEFT JOIN user_subscriptions us ON u.id = us.user_id 
            ORDER BY u.created_at ASC 
            LIMIT 1
        """)
        user_data = cursor.fetchone()
        
    if not user_data:
        print("❌ Aucun utilisateur trouvé dans la base")
        return False
        
    user_id, email, username, tier, expires_at = user_data
    tier = tier or "free"  # Par défaut FREE si pas de subscription
    
    print(f"👤 Utilisateur trouvé : {email} ({username})")
    print(f"🎯 Tier actuel : {tier.upper()}")
    
    # Configurer les fonctionnalités selon le tier
    tier_features = {
        "free": {
            "max_domains": 3,
            "max_users": 1,
            "allow_invasive": False,
            "html_reports": False,
            "api_access": False
        },
        "pro": {
            "max_domains": 50,
            "max_users": 5,
            "allow_invasive": True,
            "html_reports": True,
            "api_access": True
        },
        "enterprise": {
            "max_domains": 1000,
            "max_users": 50,
            "allow_invasive": True,
            "html_reports": True,
            "api_access": True,
            "priority_support": True,
            "custom_branding": True,
            "sso_integration": True,
            "audit_logs": True
        }
    }
    
    features = tier_features.get(tier.lower(), tier_features["free"])
    
    # Déterminer expiration
    if expires_at:
        valid_until = expires_at
    else:
        # Si pas d'expiration, 1 an à partir de maintenant
        valid_until = (datetime.now(timezone.utc) + timedelta(days=365)).isoformat()
    
    # Créer la licence minimale (format simplifié pour test)
    license_config = {
        "licence_id": f"{tier.upper()}-{user_id[:8]}",
        "tier": tier.lower(),
        "user_email": email,
        "max_users": features["max_users"],
        "max_domains": features["max_domains"],
        "valid_until": valid_until,
        "issued_at": datetime.now(timezone.utc).isoformat(),
        "features": features,
        "sync_source": "database"  # Marquer la source
    }
    
    # Sauvegarder licence (format simplifié sans chiffrement pour test)
    license_path = Path.home() / ".web-sentinel" / "license.lic"
    license_path.parent.mkdir(parents=True, exist_ok=True)
    
    with open(license_path, 'w') as f:
        json.dump(license_config, f, indent=2)
        
    print(f"✅ Licence synchronisée : {license_path}")
    print(f"📧 Email : {email}")
    print(f"🎯 Tier : {tier.upper()}")
    print(f"👥 Max utilisateurs : {features['max_users']}")
    print(f"🌐 Max domaines : {features['max_domains']}")
    print(f"⚔️ Tests invasifs : {'✅' if features['allow_invasive'] else '❌'}")
    print(f"📄 Export HTML : {'✅' if features['html_reports'] else '❌'}")
    print(f"📅 Valide jusqu'au : {valid_until}")
    
    return True

if __name__ == "__main__":
    if sync_license_from_database():
        print("\n🔄 Relancez l'application pour appliquer les changements")
    else:
        print("\n❌ Échec de la synchronisation")