"""Mermaid diagram rendering endpoint.

POST /api/v1/diagrams/render — Mermaid kaynağı → TürkPatent-uyumlu PNG.
Laravel tarafı proxy yapar, PNG'yi disk'e kaydeder, path'i diagrams tablosuna yazar.
"""

from __future__ import annotations

from fastapi import APIRouter, HTTPException
from fastapi.responses import Response
from pydantic import BaseModel, Field

from app.services.mermaid import (
    MermaidNotInstalledError,
    MermaidRenderError,
    render_mermaid_to_png,
)

router = APIRouter(prefix="/diagrams", tags=["diagrams"])


class RenderRequest(BaseModel):
    source: str = Field(..., min_length=5, max_length=20000)
    scale: int = Field(default=3, ge=1, le=6)
    width: int = Field(default=1200, ge=200, le=4000)


@router.post("/render")
async def render_diagram(request: RenderRequest) -> Response:
    """Mermaid kaynağını PNG olarak döndürür (application/png binary)."""
    try:
        png_bytes = await render_mermaid_to_png(
            request.source,
            scale=request.scale,
            width=request.width,
        )
    except MermaidNotInstalledError as exc:
        raise HTTPException(status_code=503, detail=str(exc)) from exc
    except MermaidRenderError as exc:
        raise HTTPException(status_code=400, detail=str(exc)) from exc

    return Response(
        content=png_bytes,
        media_type="image/png",
        headers={"Cache-Control": "no-cache"},
    )
