"""Run all read-only audit checks for a tenant domain."""

from __future__ import annotations

from typing import Any

from . import dns, vm112, webmail

CHECK_LABELS = {
    "carbonio": "Carbonio domain",
    "nginx_vhost": "carbonio-nginx vhost",
    "cert_le": "Let's Encrypt certificate",
    "dns_mx": "MX record",
    "dns_spf": "SPF",
    "dns_dkim": "DKIM",
    "dns_dmarc": "DMARC",
    "webmail_http": "Webmail HTTPS",
}

TENANT_API_BASE = {
    1: None,  # filled from env in run_audit
}


def run_audit(
    tenant_id: int,
    domain: str,
    *,
    vm112_api: str | None = None,
    mail_public_ip: str | None = None,
) -> dict[str, dict[str, Any]]:
    domain = domain.lower().strip()
    results: dict[str, dict[str, Any]] = {}

    if tenant_id == 1:
        api_base = vm112_api or "http://10.10.10.112:8090"
        results.update(vm112.collect(domain, api_base))

    results.update(dns.collect(domain, mail_public_ip=mail_public_ip))
    results.update(webmail.collect(domain))

    for check_id, label in CHECK_LABELS.items():
        results.setdefault(
            check_id,
            {
                "check_id": check_id,
                "label": label,
                "status": "skip",
                "message": "Check not run",
                "evidence": {},
            },
        )
        results[check_id]["label"] = label

    return results
