"""Script corrigé pour créer l'utilisateur de test."""
import sys
import os
import sqlite3
from datetime import datetime

# Chemins corrects Windows
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
BACKEND_DIR = os.path.join(BASE_DIR, 'backend')
DB_PATH = os.path.join(BASE_DIR, 'chartbastan.db')

# Importations correctes depuis backend
sys.path.insert(0, BACKEND_DIR)

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, Session
from sqlalchemy import Column, Integer, String, DateTime, Boolean
from sqlalchemy.ext.declarative import declarative_base
from passlib.context import CryptContext

# Définition du modèle User pour éviter les problèmes de cache
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True, index=True)
    email = Column(String, unique=True, nullable=False, index=True)
    name = Column(String, nullable=True)
    password_hash = Column(String, nullable=True)
    is_premium = Column(Boolean, default=False, nullable=False)
    referral_code = Column(String, unique=True, nullable=True, index=True)
    created_at = Column(DateTime, default=datetime.utcnow, nullable=False)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    daily_predictions_count = Column(Integer, default=0)
    last_prediction_date = Column(DateTime, nullable=True)

def main():
    """Créer l'utilisateur de test."""
    print("=== Création de l'utilisateur de test ===")
    print(f"Chemin de la base de données : {DB_PATH}")
    print(f"Dossier backend : {BACKEND_DIR}")
    
    # Créer l'engine et créer les tables
    print("Création de la base de données...")
    engine = create_engine(f'sqlite:///{DB_PATH}', echo=False)
    
    # Créer les tables
    Base.metadata.create_all(engine)
    print("Tables créées avec succès !")
    
    # Créer une session
    SessionLocal = sessionmaker(bind=engine, autocommit=False, autoflush=False)
    session = SessionLocal()
    
    # Hashage du mot de passe
    pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
    password_hash = pwd_context.hash("password123")
    print(f"Hash du mot de passe : {password_hash[:20]}...")
    
    try:
        # Vérifier si l'utilisateur existe déjà
        existing_user = session.query(User).filter(User.email == "test@example.com").first()
        
        if existing_user:
            print(f"⚠️  Utilisateur existe déjà : ID={existing_user.id}")
            print(f"   Email : {existing_user.email}")
            print(f"   Nom : {existing_user.name}")
            
            # Mettre à jour le mot de passe
            existing_user.password_hash = password_hash
            session.commit()
            
            print(f"✅ Mot de passe mis à jour pour l'utilisateur ID={existing_user.id}")
            print(f"   Email : {existing_user.email}")
            print(f"   Nom : {existing_user.name}")
            sys.exit(0)
        
        # Créer l'utilisateur de test
        print("\nCréation de l'utilisateur de test...")
        new_user = User(
            email="test@example.com",
            name="Utilisateur Test",
            password_hash=password_hash,
            is_premium=False,
            referral_code="TESTCODE",
            created_at=datetime.utcnow(),
            updated_at=datetime.utcnow()
        )
        
        session.add(new_user)
        session.commit()
        session.refresh(new_user)
        
        print(f"✅ Utilisateur créé avec succès !")
        print(f"   ID : {new_user.id}")
        print(f"   Email : {new_user.email}")
        print(f"   Nom : {new_user.name}")
        print(f"   Mot de passe hash : {new_user.password_hash[:20]}...")
        print(f"   Premium : {'Oui' if new_user.is_premium else 'Non'}")
        print(f"   Code de parrainage : {new_user.referral_code}")
        print(f"   Créé le : {new_user.created_at.isoformat()}")
        
    finally:
        session.close()
    
    print("\n=== Identifiants de connexion ===")
    print(f"   Email : test@example.com")
    print(f"   Mot de passe : password123")
    print(f"   URL du backend : http://127.0.0.1:8000")
    print("\nVous pouvez maintenant vous connecter via le frontend !")
