#!/usr/bin/env python3
"""
Création de la table password_reset_codes pour la réinitialisation de mot de passe
"""
import psycopg2
import os


def create_password_reset_table():
    """Créer la table password_reset_codes"""
    
    # Configuration PostgreSQL
    db_config = {
        'host': 'web-sentinel-db',
        'port': 5432,
        'database': 'websentinel_prod',
        'user': 'websentinel_user',
        'password': 'WebSentinelDB2025!'
    }
    
    conn = psycopg2.connect(**db_config)
    cursor = conn.cursor()
    
    try:
        print("🔄 Création de la table password_reset_codes...")
        
        # Créer la table
        cursor.execute("""
            CREATE TABLE IF NOT EXISTS password_reset_codes (
                id SERIAL PRIMARY KEY,
                user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
                code VARCHAR(6) NOT NULL,
                expires_at TIMESTAMP NOT NULL,
                used BOOLEAN DEFAULT FALSE,
                created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                UNIQUE(user_id)
            );
        """)
        
        # Créer un index sur user_id pour les performances
        cursor.execute("""
            CREATE INDEX IF NOT EXISTS idx_password_reset_codes_user_id 
            ON password_reset_codes(user_id);
        """)
        
        # Créer un index sur expires_at pour nettoyer les codes expirés
        cursor.execute("""
            CREATE INDEX IF NOT EXISTS idx_password_reset_codes_expires_at 
            ON password_reset_codes(expires_at);
        """)
        
        conn.commit()
        
        print("✅ Table password_reset_codes créée avec succès !")
        print("\nStructure de la table :")
        print("  - id: Identifiant unique (auto-incrémenté)")
        print("  - user_id: Référence vers l'utilisateur")
        print("  - code: Code de vérification à 6 chiffres")
        print("  - expires_at: Date d'expiration du code")
        print("  - used: Indicateur si le code a été utilisé")
        print("  - created_at: Date de création")
        print("\n✅ Index créés pour optimiser les performances")
        
        # Afficher les tables existantes
        cursor.execute("""
            SELECT table_name 
            FROM information_schema.tables 
            WHERE table_schema = 'public' 
            ORDER BY table_name;
        """)
        
        tables = cursor.fetchall()
        print(f"\n📊 Tables dans la base de données ({len(tables)}) :")
        for table in tables:
            print(f"  - {table[0]}")
        
    except Exception as e:
        conn.rollback()
        print(f"❌ Erreur : {e}")
    finally:
        cursor.close()
        conn.close()


if __name__ == "__main__":
    create_password_reset_table()
