#!/usr/bin/env python3
"""Crea un superadministrador o restablece su contraseña. En producción es la única forma de crear el primer usuario.

Uso: python scripts/crear_admin.py USUARIO "Nombre visible"
La contraseña se pide por consola (o en la variable TWIN_ADMIN_PASSWORD, para paneles sin terminal interactiva).
"""
import argparse, getpass, os, sys
from pathlib import Path

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from backend import db
from backend.auth import hash_password

p=argparse.ArgumentParser(description=__doc__,formatter_class=argparse.RawDescriptionHelpFormatter)
p.add_argument('username')
p.add_argument('name',nargs='?',default='Superadministrador')
a=p.parse_args()
password=os.getenv('TWIN_ADMIN_PASSWORD') or getpass.getpass('Contraseña (mínimo 8 caracteres): ')
if len(password)<8: raise SystemExit('La contraseña debe tener al menos 8 caracteres')
name=a.username.lower()
db.init()
with db.system() as c:
    found=next((u for u in db.rows(c,'user') if u['username']==name),None)
    if found:
        rid=found.pop('id'); found.pop('updated')
        db.put(c,'user',found|{'role':'superadmin','active':True,'pw':hash_password(password)},rid,audit=False)
        print(f'Contraseña restablecida y rol superadministrador para «{name}» en {db.DATA}')
    else:
        db.put(c,'user',dict(username=name,name=a.name,role='superadmin',active=True,pw=hash_password(password)),audit=False)
        print(f'Superadministrador «{name}» creado en {db.DATA}')
