"""Onboarding-Workflow: Env-Var prüfen, API-Verbindung smoke-testen.

Exit-Codes:
    0 — Env-Var gesetzt, API-Smoke (getCompanyList limit=1) erfolgreich.
    2 — Env-Var fehlt oder API-Antwort nicht ok. Setup-Anleitung in stderr.
    3 — Konfigurations-Fehler (selten: kaputtes Bundle).

Mandant-Argument ist akzeptiert, wird im MVP nur als Lauf-Log-Prefix
verwendet (keine Multi-Mandanten-Logik im Bundle-Stand v0.10.0).
"""
from __future__ import annotations

import argparse
import sys
from pathlib import Path
from typing import Optional


_SKILL_DIR = Path(__file__).resolve().parent.parent
_SKILLS_ROOT = _SKILL_DIR.parent
if str(_SKILLS_ROOT) not in sys.path:
    sys.path.insert(0, str(_SKILLS_ROOT))
if str(_SKILL_DIR) not in sys.path:
    sys.path.insert(0, str(_SKILL_DIR))

from _lib.env_loader import EnvVarMissingError, require_env_var  # noqa: E402


_SETUP_HINT = (
    "Lege die Umgebungsvariable GETMYINVOICES_API_KEY mit deinem GMI-API-Key an.\n"
    "Windows (PowerShell, persistent für den Benutzer):\n"
    "    [Environment]::SetEnvironmentVariable('GETMYINVOICES_API_KEY', '<dein-key>', 'User')\n"
    "macOS/Linux (bash/zsh, persistent in ~/.bashrc oder ~/.zshrc):\n"
    "    export GETMYINVOICES_API_KEY='<dein-key>'\n"
    "Den Key bekommst du in der GetMyInvoices-Webapp unter Einstellungen > API-Zugang.\n"
    "Niemals den Key in eine .env-Datei oder in den Repo-Stand committen."
)


def run(mandant_name: Optional[str]) -> int:
    """Onboarding-Hauptlogik. Liefert den Exit-Code."""
    # Schritt 1: Env-Var prüfen. EnvVarMissingError fangen, niemals
    # den Wert weiterreichen.
    try:
        require_env_var(
            "GETMYINVOICES_API_KEY",
            "gmi-accountant",
            setup_hint=_SETUP_HINT,
        )
    except EnvVarMissingError as e:
        # Per Vertrag aus _lib.env_loader enthält str(e) niemals den
        # Var-Wert. Hier nur die Anleitung auf stderr ausgeben.
        print(str(e), file=sys.stderr)
        return 2

    # Schritt 2: API-Smoke. Erst hier gmi_bridge importieren, damit
    # eine fehlende getmyinvoices-Dependency vor dem Env-Var-Check nicht
    # in einen FileNotFoundError aus dem Modul-Load läuft.
    try:
        from gmi_bridge import build_client, fetch_company_list_smoke  # noqa: WPS433
    except (FileNotFoundError, ImportError) as e:
        print(
            f"depends_on-Vertrag verletzt: {e}",
            file=sys.stderr,
        )
        return 3

    try:
        client = build_client()
        fetch_company_list_smoke(client)
    except Exception:
        # Keine Exception-Inhalte in stderr, weil sie Key-Anteile
        # enthalten könnten. Nur den Typ wäre theoretisch sicher, aber
        # auch der nicht hilfreich für den Nutzer.
        print(
            "API-Smoke-Test fehlgeschlagen. Key abgelaufen, ungueltig "
            "oder Netzwerk-Problem?",
            file=sys.stderr,
        )
        print(_SETUP_HINT, file=sys.stderr)
        return 2

    label = mandant_name or "default"
    print(f"OK: Mandant '{label}' validiert.")
    return 0


def main() -> int:
    p = argparse.ArgumentParser(description="gmi-accountant Onboarding-Check")
    p.add_argument("--mandant", default=None,
                   help="Optionaler Mandant-Label (Default: 'default').")
    args = p.parse_args()
    return run(args.mandant)


if __name__ == "__main__":
    sys.exit(main())
