"""KV flags the dispatcher reads to block public production traffic."""
from __future__ import annotations

from uuid import UUID

import structlog

from src.domain.hosting.routing_plane import CloudflareRoutingProvider

logger = structlog.get_logger()


class HostingPublicServingGate:
    def __init__(self, provider: CloudflareRoutingProvider | None = None) -> None:
        self._provider = provider or CloudflareRoutingProvider()

    async def set_public_blocked(self, project_ids: list[UUID], blocked: bool) -> None:
        for project_id in project_ids:
            key = f"cloud_public_blocked:{project_id}"
            try:
                if blocked:
                    await self._provider._kv_put(key, "1")
                else:
                    await self._provider._kv_delete(key)
            except Exception as exc:
                logger.warning("cloud_public_serving_kv_failed", project_id=str(project_id), error=str(exc))

    async def set_owner_bypass(self, project_ids: list[UUID], token: str) -> None:
        for project_id in project_ids:
            try:
                await self._provider._kv_put(f"cloud_owner_bypass:{project_id}", token)
            except Exception as exc:
                logger.warning("cloud_owner_bypass_kv_failed", project_id=str(project_id), error=str(exc))
