# app/exceptions/order_item_exception.py
"""Order item exception specific exceptions."""

from .base import BusinessLogicException, ResourceNotFoundException


class OrderItemExceptionNotFoundException(ResourceNotFoundException):
    """Raised when an order item exception is not found."""

    def __init__(self, exception_id: int | str):
        super().__init__(
            resource_type="OrderItemException",
            identifier=str(exception_id),
            error_code="ORDER_ITEM_EXCEPTION_NOT_FOUND",
        )


class OrderHasUnresolvedExceptionsException(BusinessLogicException):
    """Raised when trying to confirm an order with unresolved exceptions."""

    def __init__(self, order_id: int, unresolved_count: int):
        super().__init__(
            message=(
                f"Order has {unresolved_count} unresolved product exception(s). "
                f"Please resolve all exceptions before confirming the order."
            ),
            error_code="ORDER_HAS_UNRESOLVED_EXCEPTIONS",
            details={
                "order_id": order_id,
                "unresolved_count": unresolved_count,
            },
        )


class ExceptionAlreadyResolvedException(BusinessLogicException):
    """Raised when trying to resolve an already resolved exception."""

    def __init__(self, exception_id: int):
        super().__init__(
            message=f"Exception {exception_id} has already been resolved",
            error_code="EXCEPTION_ALREADY_RESOLVED",
            details={"exception_id": exception_id},
        )


class InvalidProductForExceptionException(BusinessLogicException):
    """Raised when the product provided for resolution is invalid."""

    def __init__(self, product_id: int, reason: str):
        super().__init__(
            message=f"Cannot use product {product_id} for resolution: {reason}",
            error_code="INVALID_PRODUCT_FOR_EXCEPTION",
            details={"product_id": product_id, "reason": reason},
        )
