"""自定义异常和异常处理器"""
from fastapi import FastAPI, Request
from fastapi.responses import JSONResponse

from app.schemas.base import ResultDomain


class BusinessException(Exception):
    """业务异常"""
    def __init__(self, code: int = 500, message: str = "业务异常"):
        self.code = code
        self.message = message


class NotFoundException(BusinessException):
    """资源不存在异常"""
    def __init__(self, message: str = "资源不存在"):
        super().__init__(code=404, message=message)


class ValidationException(BusinessException):
    """参数校验异常"""
    def __init__(self, message: str = "参数校验失败"):
        super().__init__(code=400, message=message)


def register_exception_handlers(app: FastAPI):
    """注册全局异常处理器"""
    
    @app.exception_handler(BusinessException)
    async def business_exception_handler(request: Request, exc: BusinessException):
        return JSONResponse(
            status_code=200,
            content=ResultDomain.fail(message=exc.message, code=exc.code).model_dump()
        )
    
    @app.exception_handler(Exception)
    async def global_exception_handler(request: Request, exc: Exception):
        return JSONResponse(
            status_code=500,
            content=ResultDomain.fail(message=str(exc), code=500).model_dump()
        )
