"""
HRM Domain Exceptions.

خطاهای اختصاصی لایه دامنه ماژول منابع انسانی.
"""
from shared.exceptions.business import BusinessError


class HRMDomainError(BusinessError):
    """خطای پایه دامنه HRM."""
    pass


class EmployeeNotFoundError(HRMDomainError):
    """کارمند یافت نشد."""
    def __init__(self, identifier: str = ""):
        super().__init__(f"کارمند یافت نشد: {identifier}")


class DuplicateEmployeeCodeError(HRMDomainError):
    """کد پرسنلی تکراری."""
    def __init__(self, code: str):
        super().__init__(f"کد پرسنلی تکراری: {code}")


class DuplicateNationalCodeError(HRMDomainError):
    """کد ملی تکراری."""
    def __init__(self, code: str):
        super().__init__(f"کد ملی تکراری: {code}")


class InvalidEmploymentStatusError(HRMDomainError):
    """وضعیت استخدامی نامعتبر."""
    def __init__(self, current_status: str, action: str):
        super().__init__(
            f"عملیات '{action}' در وضعیت '{current_status}' مجاز نیست"
        )


class PositionNotFoundError(HRMDomainError):
    """پست سازمانی یافت نشد."""
    def __init__(self, identifier: str = ""):
        super().__init__(f"پست سازمانی یافت نشد: {identifier}")


class PositionAlreadyFilledError(HRMDomainError):
    """پست قبلاً پر شده."""
    def __init__(self, position_code: str):
        super().__init__(f"پست '{position_code}' قبلاً پر شده است")


class InsufficientLeaveBalanceError(HRMDomainError):
    """مانده مرخصی کافی نیست."""
    def __init__(self, available: str, requested: str):
        super().__init__(
            f"مانده مرخصی کافی نیست. مانده: {available}، درخواست: {requested}"
        )


class LeaveRequestNotFoundError(HRMDomainError):
    """درخواست مرخصی یافت نشد."""
    def __init__(self, identifier: str = ""):
        super().__init__(f"درخواست مرخصی یافت نشد: {identifier}")


class InvalidLeaveRequestError(HRMDomainError):
    """درخواست مرخصی نامعتبر."""
    pass


class LegalEntityNotFoundError(HRMDomainError):
    """شخصیت حقوقی یافت نشد."""
    def __init__(self, identifier: str = ""):
        super().__init__(f"شخصیت حقوقی یافت نشد: {identifier}")


class LocationNotFoundError(HRMDomainError):
    """مکان یافت نشد."""
    def __init__(self, identifier: str = ""):
        super().__init__(f"مکان یافت نشد: {identifier}")


class TimesheetError(HRMDomainError):
    """خطای تایم‌شیت."""
    pass


class PayrollError(HRMDomainError):
    """خطای حقوق و دستمزد."""
    pass
