from __future__ import annotations

from app.excel_import.config import copropriete_adresse, copropriete_nom
from app.excel_import.report import ImportReport
from app.helpers import link_user_to_copropriete
from app.models import Copropriete, User, db
from init_db import DEFAULT_USERS, ensure_default_users, seed_types_copropriete


def run(config: dict, *, dry_run: bool) -> tuple[Copropriete | None, ImportReport]:
    report = ImportReport("copropriete", dry_run=dry_run)
    nom = copropriete_nom(config)
    adresse = copropriete_adresse(config)

    existing = Copropriete.query_actifs().filter(Copropriete.nom == nom).first()
    if existing:
        report.add_warning(f"Copropriété existante réutilisée : {nom} (id={existing.id})")
        copro = existing
    else:
        copro = Copropriete(nom=nom, adresse=adresse)
        if not dry_run:
            db.session.add(copro)
            db.session.flush()
            seed_types_copropriete(copro)
        report.add_created(f"Copropriété « {nom} »")

    if not dry_run:
        ensure_default_users()
        if copro.id:
            for spec in DEFAULT_USERS:
                user = User.query.filter_by(username=spec["username"]).first()
                if user:
                    link_user_to_copropriete(user.id, copro.id)
        db.session.commit()

    return copro, report
