from fastapi import APIRouter, UploadFile, File, HTTPException, status, Depends from typing import Any from app.services.script_parser import parser_service from app.schemas.script import ScriptAnalysisResponse router = APIRouter() @router.post("/parse", response_model=ScriptAnalysisResponse) async def parse_script( file: UploadFile = File(...) ) -> Any: if not file.content_type in ["text/plain", "text/markdown", "application/octet-stream"]: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Only text files are supported for now." ) content = await file.read() try: text_content = content.decode("utf-8") except UnicodeDecodeError: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="File must be UTF-8 encoded text." ) try: result = await parser_service.parse_script(text_content) return result except Exception as e: raise HTTPException( status_code=status.HTTP_500_INTERNAL_SERVER_ERROR, detail=f"Error parsing script: {str(e)}" )