#!/usr/bin/env python3
"""Crée un utilisateur de connexion (ligne de commande)."""
import argparse
import getpass
import os
import sys

sys.path.insert(0, os.path.dirname(__file__))

from app import create_app
from app.helpers import link_user_to_copropriete
from app.models import Copropriete, User, db


def main():
    parser = argparse.ArgumentParser(description="Créer un utilisateur Papa")
    parser.add_argument("username", help="Identifiant de connexion")
    parser.add_argument(
        "--copropriete",
        "-c",
        type=int,
        action="append",
        dest="copropriete_ids",
        help="ID copropriété à associer (répétable). Sans option : aucun lien.",
    )
    parser.add_argument(
        "--admin",
        action="store_true",
        help="Donner les droits administrateur",
    )
    parser.add_argument(
        "--list-coproprietes",
        action="store_true",
        help="Afficher les copropriétés existantes puis quitter",
    )
    args = parser.parse_args()

    app = create_app()
    with app.app_context():
        if args.list_coproprietes:
            copros = Copropriete.query_actifs().order_by(Copropriete.nom).all()
            if not copros:
                print("Aucune copropriété en base.")
            for c in copros:
                print(f"  {c.id} — {c.nom}")
            return

        if User.query.filter_by(username=args.username).first():
            print(f"Erreur : l'utilisateur « {args.username} » existe déjà.")
            sys.exit(1)

        password = getpass.getpass("Mot de passe : ")
        confirm = getpass.getpass("Confirmer le mot de passe : ")
        if password != confirm:
            print("Erreur : les mots de passe ne correspondent pas.")
            sys.exit(1)
        if not password:
            print("Erreur : mot de passe vide.")
            sys.exit(1)

        user = User(username=args.username, is_admin=args.admin)
        user.set_password(password)
        db.session.add(user)
        db.session.flush()

        if args.copropriete_ids:
            for copro_id in args.copropriete_ids:
                copro = Copropriete.query_actifs().filter_by(id=copro_id).first()
                if not copro:
                    print(f"Avertissement : copropriété id={copro_id} introuvable, ignorée.")
                    continue
                link_user_to_copropriete(user.id, copro.id)
                print(f"  Lié à : {copro.nom} (id={copro.id})")

        db.session.commit()
        print(f"Utilisateur créé : {args.username}")
        if not args.copropriete_ids:
            print(
                "Aucune copropriété associée : à la 1re connexion il pourra en créer une,"
            )
            print("ou relancez ce script avec --copropriete <id>.")


if __name__ == "__main__":
    main()
