from typing import Any, Dict, List from fastapi import APIRouter, HTTPException from sqlalchemy.exc import SQLAlchemyError from app.api.routes.dependencies import db_error_detail from app.api.schemas import ( AgendarRevisaoRequest, AvaliarVeiculoTrocaRequest, CancelarPedidoRequest, ConsultarEstoqueRequest, RealizarPedidoRequest, ValidarClienteVendaRequest, ) from app.services.handlers import ( agendar_revisao, avaliar_veiculo_troca, cancelar_pedido, consultar_estoque, realizar_pedido, validar_cliente_venda, ) router = APIRouter(prefix="/mock", tags=["Mock"]) @router.post("/consultar-estoque") async def consultar_estoque_endpoint( body: ConsultarEstoqueRequest, ) -> List[Dict[str, Any]]: """Consulta estoque de veiculos mock com filtros opcionais.""" try: return await consultar_estoque( preco_max=body.preco_max, categoria=body.categoria, ordenar_preco=body.ordenar_preco, limite=body.limite, ) except SQLAlchemyError as exc: raise HTTPException(status_code=503, detail=db_error_detail(exc)) @router.post("/validar-cliente-venda") async def validar_cliente_venda_endpoint( body: ValidarClienteVendaRequest, ) -> Dict[str, Any]: """Valida elegibilidade de cliente para uma venda.""" try: return await validar_cliente_venda( cpf=body.cpf, valor_veiculo=body.valor_veiculo, ) except SQLAlchemyError as exc: raise HTTPException(status_code=503, detail=db_error_detail(exc)) @router.post("/avaliar-veiculo-troca") async def avaliar_veiculo_troca_endpoint( body: AvaliarVeiculoTrocaRequest, ) -> Dict[str, Any]: """Avalia valor de troca de um veiculo com base em modelo, ano e quilometragem.""" return await avaliar_veiculo_troca( modelo=body.modelo, ano=body.ano, km=body.km, ) @router.post("/agendar-revisao") async def agendar_revisao_endpoint( body: AgendarRevisaoRequest, ) -> Dict[str, Any]: """Agenda revisao para uma placa em data/hora informada.""" try: return await agendar_revisao( placa=body.placa, data_hora=body.data_hora, modelo=body.modelo, ano=body.ano, km=body.km, revisao_previa_concessionaria=body.revisao_previa_concessionaria, user_id=body.user_id, ) except SQLAlchemyError as exc: raise HTTPException(status_code=503, detail=db_error_detail(exc)) @router.post("/cancelar-pedido") async def cancelar_pedido_endpoint( body: CancelarPedidoRequest, ) -> Dict[str, Any]: """Cancela pedido de venda existente registrando o motivo.""" try: return await cancelar_pedido( numero_pedido=body.numero_pedido, motivo=body.motivo, user_id=body.user_id, ) except SQLAlchemyError as exc: raise HTTPException(status_code=503, detail=db_error_detail(exc)) @router.post("/realizar-pedido") async def realizar_pedido_endpoint( body: RealizarPedidoRequest, ) -> Dict[str, Any]: """Cria um pedido de compra para cliente aprovado no valor informado.""" try: return await realizar_pedido( cpf=body.cpf, valor_veiculo=body.valor_veiculo, user_id=body.user_id, ) except SQLAlchemyError as exc: raise HTTPException(status_code=503, detail=db_error_detail(exc))