"""Selector-scoped board read-model HTTP route."""

from __future__ import annotations

import json

from fastapi import APIRouter, HTTPException
from fastapi.responses import JSONResponse

from recoil.api.schemas.board import BoardModel
from recoil.pipeline.orchestrator.batch_selector import SelectorResolutionError
from recoil.workspace import readmodel
from recoil.workspace._project_validation import _validate_project

router = APIRouter()


@router.get("/api/board/{selector}", response_model=BoardModel)
async def get_board(selector: str, project: str = "tartarus") -> BoardModel | JSONResponse:
    _validate_project(project)
    try:
        return readmodel.get_board(selector, project)
    except SelectorResolutionError as e:
        return JSONResponse({"error": str(e), "selector": selector}, status_code=400)
    except FileNotFoundError as e:
        return JSONResponse({"error": str(e), "selector": selector}, status_code=404)
    except (json.JSONDecodeError, ValueError) as e:
        raise HTTPException(status_code=500, detail=str(e)) from e
