"""Mock ComfyUI adapter for testing — returns canned image bytes.

The live ComfyUIAdapter is image-only (direct_submit_image); the async-video
Protocol methods raise NotImplementedError. The mock mirrors that surface so
test-mode routing of ``krea-2-turbo`` returns deterministic bytes without a
running ComfyUI server.
"""

from __future__ import annotations

from typing import Optional

from recoil.execution.providers.base import (
    CAPABILITY_KEYS,
    PollRequest,
    PollResult,
    ProviderJob,
    SubmitRequest,
    UnifiedVideoPayload,
)

# Smallest valid PNG (1x1) — canned output bytes.
_CANNED_PNG = bytes.fromhex(
    "89504e470d0a1a0a0000000d49484452000000010000000108060000001f15c4"
    "890000000d49444154789c6360000002000100ffff03000006000557bfabd400"
    "00000049454e44ae426082"
)


class MockComfyUIAdapter:
    provider_id = "comfyui"
    supported_models = ["krea-2-turbo"]
    auth_env_var = "COMFYUI_URL"
    base_url = "http://mock.comfyui.test:8188"
    max_prompt_chars = None
    capabilities = {k: False for k in CAPABILITY_KEYS}
    capabilities.update({"t2v": True, "resolution_720p": True})
    status = "primary"

    def direct_submit_image(self, payload: UnifiedVideoPayload) -> dict:
        return {"image_bytes": _CANNED_PNG, "cost_usd": 0.0,
                "native_id": "mock_comfyui_prompt"}

    def compute_cost(self, duration_s: float, tier: str, profile: dict) -> float:
        return 0.0

    def build_submit(self, payload: UnifiedVideoPayload, tier: str) -> SubmitRequest:
        raise NotImplementedError("ComfyUI is image-only (direct_submit_image)")

    def parse_submit(self, resp: dict, payload: UnifiedVideoPayload, tier: str) -> ProviderJob:
        raise NotImplementedError("ComfyUI is image-only (direct_submit_image)")

    def build_poll(self, job: ProviderJob) -> PollRequest:
        raise NotImplementedError("ComfyUI is image-only (direct_submit_image)")

    def parse_poll(self, resp: dict, job: ProviderJob) -> PollResult:
        raise NotImplementedError("ComfyUI is image-only (direct_submit_image)")

    def build_result_fetch(self, job: ProviderJob) -> Optional[PollRequest]:
        raise NotImplementedError("ComfyUI is image-only (direct_submit_image)")

    def parse_result(self, resp: dict, job: ProviderJob) -> PollResult:
        raise NotImplementedError("ComfyUI is image-only (direct_submit_image)")


ADAPTER = MockComfyUIAdapter()
