"""Tenant-aware storage helpers for wp_invoices_mail_app."""

from __future__ import annotations

import json
import os
from pathlib import Path
from typing import Any


PROJECT_ROOT = Path(__file__).resolve().parents[2]
DEFAULT_TENANT_ID = "absolutems"


def resolve_tenant_id(context: dict[str, Any] | None = None) -> str:
    tenant = (context or {}).get("tenant") or {}
    tenant_id = tenant.get("tenant_id") or DEFAULT_TENANT_ID
    return str(tenant_id).strip() or DEFAULT_TENANT_ID


def get_tenant_mail_base_path(tenant_id: str) -> str:
    return str(PROJECT_ROOT / "storage" / "tenants" / tenant_id / "wp_invoices_mail_app")


def ensure_tenant_mail_paths(tenant_id: str) -> dict[str, Path]:
    base = Path(get_tenant_mail_base_path(tenant_id))
    inbox = base / "inbox"
    staging = base / "staging"
    processed = base / "processed"
    logs = base / "logs"

    for path in (base, inbox, staging, processed, logs):
        os.makedirs(path, exist_ok=True)

    return {
        "base": base,
        "inbox": inbox,
        "staging": staging,
        "processed": processed,
        "logs": logs,
    }


def safe_storage_stem(filename: str) -> str:
    value = (filename or "unnamed").replace("/", "_").replace("\\", "_")
    return Path(value).stem or "unnamed"


def write_json(path: Path, payload: Any) -> None:
    path.parent.mkdir(parents=True, exist_ok=True)
    path.write_text(json.dumps(payload, indent=2, ensure_ascii=False), encoding="utf-8")
