"""Create the private BancaNet administrator from a terminal prompt."""

import json
import os
from getpass import getpass
from pathlib import Path

from werkzeug.security import generate_password_hash


def main():
    username = input("Usuario administrador [admin]: ").strip() or "admin"
    if not 1 <= len(username) <= 50:
        raise SystemExit("El usuario debe contener entre 1 y 50 caracteres.")

    password = getpass("Contraseña (mínimo 12 caracteres): ")
    confirmation = getpass("Repite la contraseña: ")
    if password != confirmation:
        raise SystemExit("Las contraseñas no coinciden.")
    if len(password) < 12:
        raise SystemExit("La contraseña debe tener al menos 12 caracteres.")

    destination = Path(__file__).resolve().parent / ".kia-admin.json"
    temporary = destination.with_suffix(".tmp")
    temporary.write_text(
        json.dumps(
            {"username": username, "password_hash": generate_password_hash(password)},
            indent=2,
        ),
        encoding="utf-8",
    )
    try:
        os.chmod(temporary, 0o600)
    except OSError:
        pass
    os.replace(temporary, destination)
    print(f"Administrador '{username}' creado. Reinicia la aplicación desde cPanel.")


if __name__ == "__main__":
    main()
