"""Starlette REST Route Handlers for GCP Solution Architecture Agent.""" import logging from typing import Any, Dict from starlette.requests import Request from starlette.responses import JSONResponse from app.card import AGENT_CARD from app.config import get_settings from app.skills.loader import SkillLoader from app.tools.validation_tools import validate_repository_artifacts from app.workflows.gcp_architecture_graph import create_agent logger = logging.getLogger(__name__) async def health_check(request: Request) -> JSONResponse: """GET /health - Operational health endpoint.""" settings = get_settings() return JSONResponse({ "status": "healthy", "agent": settings.AGENT_NAME, "version": settings.AGENT_VERSION, }) async def get_card(request: Request) -> JSONResponse: """GET /card - Agent metadata and capability card.""" return JSONResponse(AGENT_CARD) async def run_workflow(request: Request) -> JSONResponse: """POST /generate - Execute full 4-phase GCP Solution Architecture workflow.""" try: body = await request.json() if request.headers.get("content-type") == "application/json" else {} except Exception: body = {} workflow_request = body.get("request", "Default event-driven HTTP architecture") target_dir = body.get("target_dir", ".") settings = get_settings() loader = SkillLoader(settings.SKILLS_DIR) loader.load_skills() agent = create_agent(loader) initial_state = { "workflow_request": workflow_request, "target_dir": target_dir, "active_skills": [], } final_state = agent.invoke(initial_state) return JSONResponse({ "status": "success", "phases_completed": ["discover", "design", "validate", "package"], "validation_passed": final_state.get("validation_passed", True), "artifacts": { "requirements_doc": final_state.get("requirements_doc"), "architecture_doc": final_state.get("architecture_doc"), "mermaid_diagram": final_state.get("mermaid_diagram"), "terraform_code": final_state.get("terraform_code"), "validation_results": final_state.get("validation_results"), "solution_guide": final_state.get("solution_guide"), }, "active_skills": final_state.get("active_skills", []), }) async def validate_artifacts_route(request: Request) -> JSONResponse: """POST /validate - Run pre-deployment validation checks against target directory.""" try: body = await request.json() if request.headers.get("content-type") == "application/json" else {} except Exception: body = {} target_dir = body.get("target_dir", ".") result = validate_repository_artifacts.invoke({"target_dir": target_dir}) status_code = 200 if result.get("valid") else 400 return JSONResponse(result, status_code=status_code)