from typing import Union

from starlette import status


class MeDaCaException(Exception):
    """Webアプリの共通例外"""
    pass


class NotAuthorizeException(MeDaCaException):
    """認証失敗の例外"""
    pass


class JWTTokenVerifyException(MeDaCaException):
    """トークン検証失敗の例外"""
    pass


class DBException(MeDaCaException):
    """DB関連の例外"""
    pass


class UnexpectedException(MeDaCaException):
    """予期しない例外"""

    # デフォルトを500エラーとする
    default_status_code = status.HTTP_500_INTERNAL_SERVER_ERROR

    def __init__(
        self,
        detail: Union[str, dict],
    ) -> None:
        self.status_code = status.HTTP_500_INTERNAL_SERVER_ERROR
        self.detail = detail
