"""Deterministic mock atlas adapter (deprecated; single-call result)."""

from __future__ import annotations
from typing import Optional

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


class MockAtlasAdapter:
    provider_id = "atlas"
    supported_models = ["seeddance-2.0"]
    auth_env_var = "ATLAS_CLOUD_API_KEY"
    base_url = "mock://atlas"
    max_prompt_chars = None
    status = "deprecated"
    capabilities = {
        "t2v": True, "i2v": True, "r2v": True, "end_frame": True,
        "audio": True, "negative_prompt": True,
        "resolution_480p": True, "resolution_720p": True, "resolution_1080p": False,
    }

    def build_submit(self, payload, tier):
        return SubmitRequest(method="POST", url=f"{self.base_url}/submit", headers={}, body={"prompt": payload.prompt, "tier": tier})

    def parse_submit(self, resp, payload, tier):
        data = resp.get("data", resp)
        return ProviderJob(
            provider_id=self.provider_id, model_id=payload.model_id,
            native_id=data.get("id", "mock-atlas-id"),
            tier=tier, duration_s=payload.duration_s, resolution=payload.resolution,
            native_state={},
        )

    def build_poll(self, job):
        return PollRequest(method="GET", url=f"{self.base_url}/status/{job.native_id}", headers={})

    def parse_poll(self, resp, job):
        data = resp.get("data", resp)
        raw = (data.get("status") or "").lower()
        if raw in ("completed", "succeeded"):
            return PollResult(status="COMPLETED", raw=data)
        if raw == "failed":
            return PollResult(status="FAILED", error=data.get("message", "mock atlas failed"), raw=data)
        return PollResult(status="IN_PROGRESS", raw=data)

    def build_result_fetch(self, job) -> Optional[PollRequest]:
        return None

    def parse_result(self, resp, job):
        data = resp.get("data", resp) if isinstance(resp, dict) and "data" in resp else resp
        outputs = (data or {}).get("outputs") or []
        return PollResult(status="COMPLETED", video_url=outputs[0] if outputs else None, raw=data or {})

    def compute_cost(self, duration_s, tier, profile):
        return 0.40 * float(duration_s)


ADAPTER = MockAtlasAdapter()
__all__ = ["MockAtlasAdapter", "ADAPTER"]
