"""
Crée le compte administrateur dans la BDD RollerLogic.
Utilise argon2id (même algo que l'API) pour hasher le mot de passe.
"""
import mysql.connector
from argon2 import PasswordHasher, Type
from python.db_config import DB_CONFIG

EMAIL = "bruno@taaazzz-prog.fr"
PASSWORD = "@51008473@ZoE@"
DISPLAY_NAME = "Bruno"

def main():
    # Hash argon2id avec les mêmes paramètres que l'API
    ph = PasswordHasher(time_cost=3, memory_cost=65536, parallelism=1, type=Type.ID)
    password_hash = ph.hash(PASSWORD)

    conn = mysql.connector.connect(**DB_CONFIG)
    cursor = conn.cursor()

    try:
        # Vérifier si le compte existe déjà
        cursor.execute("SELECT id, is_admin FROM users WHERE email = %s", (EMAIL,))
        existing = cursor.fetchone()

        if existing:
            user_id = existing[0]
            print(f"Compte existant (id={user_id}), mise a jour en admin...")
            cursor.execute(
                "UPDATE users SET password_hash = %s, is_admin = 1, display_name = %s WHERE id = %s",
                (password_hash, DISPLAY_NAME, user_id),
            )
        else:
            cursor.execute(
                """INSERT INTO users (email, password_hash, display_name, guest, is_admin, vip_no_ads, failed_login_attempts)
                   VALUES (%s, %s, %s, 0, 1, 0, 0)""",
                (EMAIL, password_hash, DISPLAY_NAME),
            )
            user_id = cursor.lastrowid
            print(f"Compte admin cree (id={user_id})")

            # Créer le wallet associé
            cursor.execute(
                "INSERT INTO wallets (user_id, points, hints, undos, replays, bonus_points) VALUES (%s, 0, 0, 0, 0, 0)",
                (user_id,),
            )
            # Créer les settings par défaut
            cursor.execute(
                "INSERT INTO user_settings (user_id) VALUES (%s)",
                (user_id,),
            )
            # Créer les stats par défaut
            cursor.execute(
                "INSERT INTO user_stats (user_id, total_completions, total_moves, total_time, tutorial_completed) VALUES (%s, 0, 0, 0, 0)",
                (user_id,),
            )

        conn.commit()
        print(f"\nCompte admin pret :")
        print(f"  Email    : {EMAIL}")
        print(f"  Mot de passe : {'*' * len(PASSWORD)}")
        print(f"  is_admin : 1")
        print(f"  Hash     : {password_hash[:40]}...")

    except Exception as e:
        conn.rollback()
        print(f"ERREUR: {e}")
        raise
    finally:
        cursor.close()
        conn.close()

if __name__ == "__main__":
    main()
