"""Manual runner for the management-tenant step.

Ensures a tenant exists and is running in the orchestrator without running
the full pipeline.

Usage:
  uv run python pipeline/management-tenant/run.py --efs-env freemeal
  uv run python pipeline/management-tenant/run.py --efs-env freemeal --tenant-password secret
"""
from __future__ import annotations

import argparse
import sys
from pathlib import Path

# ── Path setup ────────────────────────────────────────────────────────────────
ROOT_DIR        = Path(__file__).resolve().parents[2]
TENANT_PIPELINE = Path(__file__).resolve().parent / "pipeline"

for _p in (str(ROOT_DIR), str(TENANT_PIPELINE)):
    if _p not in sys.path:
        sys.path.insert(0, _p)

try:
    from dotenv import load_dotenv  # type: ignore
    load_dotenv(ROOT_DIR / ".env", override=False)
except ImportError:
    pass

from shared.config import EFS_ENV, EFS_MOUNT, ORCHESTRATOR_URL, TENANT_PASSWORD  # noqa: E402
from shared.logging import get_logger                                   # noqa: E402
from tenant_service import TenantConfig, ensure_tenant                 # noqa: E402

logger = get_logger(__name__)

_DIVIDER = "─" * 55


def main(argv: list[str] | None = None) -> int:
    parser = argparse.ArgumentParser(
        description="Manually run the management-tenant step.",
        formatter_class=argparse.RawDescriptionHelpFormatter,
        epilog=__doc__,
    )
    parser.add_argument(
        "--efs-env", default=None,
        help=f"Tenant name (overrides EFS_ENV={EFS_ENV!r}).",
    )
    parser.add_argument(
        "--tenant-password", default=None,
        help="Password for new tenant creation (overrides TENANT_PASSWORD).",
    )
    args = parser.parse_args(argv)

    tenant_name = args.efs_env or EFS_ENV
    if not tenant_name:
        print("ERROR: tenant name required — use --efs-env or set EFS_ENV in .env", file=sys.stderr)
        return 1

    password = args.tenant_password or TENANT_PASSWORD
    if not password:
        print("ERROR: tenant password required — use --tenant-password or set TENANT_PASSWORD in .env", file=sys.stderr)
        return 1

    print(_DIVIDER)
    print("  management-tenant — manual test run")
    print(_DIVIDER)
    print(f"  Tenant       : {tenant_name}")
    print(f"  Orchestrator : {ORCHESTRATOR_URL}")
    print(_DIVIDER)

    config = TenantConfig(orchestrator_url=ORCHESTRATOR_URL, password=password, efs_mount=EFS_MOUNT or "/mnt/efs")
    rc = 0
    try:
        status = ensure_tenant(config, tenant_name=tenant_name)
        print(f"\n[tenant] Result: {status}")
    except Exception as exc:
        print(f"[tenant] FAILED: {exc}", file=sys.stderr)
        rc = 1

    print(_DIVIDER)
    print("  Done." if rc == 0 else "  Finished with errors.")
    print(_DIVIDER)
    return rc


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