#!/usr/bin/env python3
"""Script pour créer le compte administrateur"""

import asyncio
import os
import bcrypt
from dotenv import load_dotenv
from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, async_sessionmaker
from sqlalchemy import text

load_dotenv()

DATABASE_URL = os.environ.get('DATABASE_URL')
ADMIN_EMAIL = os.environ.get('ADMIN_EMAIL', 'admin@apora.net')
ADMIN_PASSWORD = os.environ.get('ADMIN_PASSWORD', 'OporaVie2026!')

def hash_password(password: str) -> str:
    return bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')

async def create_admin():
    engine = create_async_engine(DATABASE_URL, echo=True)
    async_session_maker = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
    
    async with async_session_maker() as session:
        # Vérifier si l'admin existe déjà
        result = await session.execute(
            text("SELECT * FROM users WHERE email = :email"),
            {"email": ADMIN_EMAIL}
        )
        existing = result.fetchone()
        
        if existing:
            print(f"Le compte admin {ADMIN_EMAIL} existe déjà!")
            return
        
        # Créer le compte admin
        hashed = hash_password(ADMIN_PASSWORD)
        await session.execute(
            text("""
                INSERT INTO users (email, password, role, first_name, last_name, created_at)
                VALUES (:email, :password, 'admin', 'Admin', 'Opora Vie', NOW())
            """),
            {"email": ADMIN_EMAIL, "password": hashed}
        )
        await session.commit()
        print(f"Compte admin créé avec succès!")
        print(f"Email: {ADMIN_EMAIL}")
        print(f"Mot de passe: {ADMIN_PASSWORD}")

if __name__ == "__main__":
    asyncio.run(create_admin())
