import logging

from fastapi import APIRouter, HTTPException
from pydantic import BaseModel

try:
    from python_sidecar.export.markdown import MarkdownGenerator
except ImportError as import_error:
    MarkdownGenerator = None  # type: ignore[assignment]
    MARKDOWN_IMPORT_ERROR = import_error
else:
    MARKDOWN_IMPORT_ERROR = None

logger = logging.getLogger(__name__)
router = APIRouter()


class ExportRequest(BaseModel):
    session_dir: str


@router.post("/markdown")
async def export_markdown(request: ExportRequest):
    if MarkdownGenerator is None:
        message = "Export unavailable: optional dependency missing"
        if MARKDOWN_IMPORT_ERROR is not None:
            message = f"{message} ({MARKDOWN_IMPORT_ERROR})"
        raise HTTPException(status_code=503, detail=message)

    try:
        generator = MarkdownGenerator(request.session_dir)
        output_path = generator.generate()
        if not output_path:
            detail = "Could not generate markdown. Ensure analysis is complete."
            raise HTTPException(
                status_code=400,
                detail=detail,
            )
        return {"status": "exported", "path": output_path}
    except HTTPException:
        raise
    except Exception as e:
        logger.exception("Markdown export failed for session %s", request.session_dir)
        raise HTTPException(status_code=500, detail=str(e))
