"""Existing Cloud email.send enqueue seam.

Dashboard/BFF capability invoke and generated-app Cloud jobs share this
request_type. This module does not resolve providers; Cloud authorize runs
email_delivery as it does today.
"""
from __future__ import annotations

from typing import Any
from uuid import UUID

from src.domain.cloud.schemas import (
    AuthorizeRequest,
    AuthorizeRequestMeta,
    AuthorizeResponseDenied,
)
from src.domain.cloud.service import CloudInternalService, _expected_client_id
from src.domain.connectors.idempotency import execute_idempotency_key
from src.integrations.cloud_control_client import CloudControlClient


async def enqueue_authorized_email_send(
    *,
    cloud_svc: CloudInternalService,
    cloud_client: CloudControlClient,
    project: Any,
    workspace_id: UUID,
    payload: dict[str, Any],
    idempotency_key: str | None = None,
    handshake_id: str = "core_capability_invoke",
) -> dict[str, Any]:
    """Authorize + enqueue the same email.send job Cloud already executes."""
    idem = execute_idempotency_key(idempotency_key)
    auth = await cloud_svc.authorize(
        AuthorizeRequest(
            workspace_id=str(workspace_id),
            project_id=str(project.id),
            client_id=_expected_client_id(project),
            handshake_id=handshake_id,
            request_type="email.send",
            idempotency_key=idem,
            request_meta=AuthorizeRequestMeta(
                origin="",
                payload_hash="",
                estimated_units=1,
            ),
        )
    )
    if isinstance(auth, AuthorizeResponseDenied):
        return {
            "ok": False,
            "reason_code": auth.reason_code or "email_provider_not_configured",
            "message": auth.message or auth.reason_code,
        }

    result = await cloud_client.enqueue_control_job(
        project_id=str(project.id),
        workspace_id=str(workspace_id),
        client_id=_expected_client_id(project),
        request_type="email.send",
        idempotency_key=idem,
        payload=payload,
        authorization_id=auth.authorization_id,
        grant_jwt=auth.grant.jwt,
        grant_expires_at=auth.grant.expires_at,
        policy_snapshot=auth.policy_snapshot.model_dump(mode="json"),
    )
    if not result.get("ok"):
        cloud_error = result.get("error") or "cloud_enqueue_failed"
        return {
            "ok": False,
            "reason_code": "provider_unavailable",
            "message": f"Failed to queue email.send job: {cloud_error}",
        }
    return {
        "ok": True,
        "job_id": str(result.get("job_id") or ""),
        "status": str(result.get("status") or "queued"),
    }
