#!/usr/bin/env python3
"""
Script pour initialiser les valeurs par défaut des licences selon leur tier.
À exécuter APRÈS migrate_users_table.py pour configurer correctement les limites.
"""

import os
import sys
from sqlalchemy import create_engine, text

DATABASE_URL = os.getenv("DATABASE_URL", "postgresql://websentinel:your_password@localhost:5432/websentinel_prod")

def update_defaults_by_tier():
    """Met à jour les limites selon le tier de chaque utilisateur."""
    engine = create_engine(DATABASE_URL)
    
    tier_configs = {
        'free': {
            'max_domains': 1,
            'max_users': 1,
            'allow_source_scan': False,
            'max_source_files': 0,
            'max_source_size_mb': 0,
            'advanced_rules': False,
        },
        'pro': {
            'max_domains': 10,
            'max_users': 5,
            'allow_source_scan': True,
            'max_source_files': 100,
            'max_source_size_mb': 50,
            'advanced_rules': False,
        },
        'entreprise': {
            'max_domains': 50,
            'max_users': 50,
            'allow_source_scan': True,
            'max_source_files': 1000,
            'max_source_size_mb': 500,
            'advanced_rules': True,
        },
        'enterprise': {  # Alias pour entreprise
            'max_domains': 50,
            'max_users': 50,
            'allow_source_scan': True,
            'max_source_files': 1000,
            'max_source_size_mb': 500,
            'advanced_rules': True,
        },
        'sysop': {
            'max_domains': 999,
            'max_users': 999,
            'allow_source_scan': True,
            'max_source_files': 9999,
            'max_source_size_mb': 9999,
            'advanced_rules': True,
        },
    }
    
    print("🔄 Mise à jour des limites par défaut selon les tiers...")
    print("")
    
    with engine.connect() as conn:
        # Compter les utilisateurs par tier
        result = conn.execute(text("""
            SELECT LOWER(tier) as tier, COUNT(*) as count
            FROM users
            WHERE tier IS NOT NULL
            GROUP BY LOWER(tier)
        """))
        
        print("📊 Distribution des utilisateurs par tier:")
        for row in result:
            print(f"  - {row.tier}: {row.count} utilisateurs")
        print("")
        
        # Mettre à jour chaque tier
        for tier, config in tier_configs.items():
            print(f"⚙️  Configuration du tier '{tier}':")
            print(f"  - max_domains: {config['max_domains']}")
            print(f"  - max_users: {config['max_users']}")
            print(f"  - allow_source_scan: {config['allow_source_scan']}")
            print(f"  - max_source_files: {config['max_source_files']}")
            print(f"  - max_source_size_mb: {config['max_source_size_mb']}")
            print(f"  - advanced_rules: {config['advanced_rules']}")
            
            try:
                result = conn.execute(text(f"""
                    UPDATE users
                    SET 
                        max_domains = :max_domains,
                        max_users = :max_users,
                        allow_source_scan = :allow_source_scan,
                        max_source_files = :max_source_files,
                        max_source_size_mb = :max_source_size_mb,
                        advanced_rules = :advanced_rules
                    WHERE LOWER(tier) = :tier
                """), {
                    'tier': tier,
                    **config
                })
                conn.commit()
                print(f"  ✅ {result.rowcount} utilisateur(s) mis à jour")
            except Exception as e:
                print(f"  ⚠️  Erreur: {e}")
                conn.rollback()
            
            print("")
    
    print("✨ Configuration terminée!")
    print("")
    print("ℹ️  Vérification:")
    print("   Connectez-vous au panel admin et vérifiez qu'une licence PRO a bien:")
    print("   - max_domains: 10")
    print("   - allow_source_scan: true")

if __name__ == "__main__":
    try:
        update_defaults_by_tier()
    except Exception as e:
        print(f"❌ Erreur: {e}", file=sys.stderr)
        sys.exit(1)
