"""Enumeration types for the tax system."""

from enum import Enum


class TaxpayerType(str, Enum):
    """Taxpayer types"""

    INDIVIDUAL = "Individual"
    PARTNERSHIP = "Partnership"
    COMPANY = "Company"


class DocumentKind(str, Enum):
    """Document types"""

    BANK_STATEMENT = "bank_statement"
    INVOICE = "invoice"
    RECEIPT = "receipt"
    P_AND_L = "p_and_l"
    BALANCE_SHEET = "balance_sheet"
    PAYSLIP = "payslip"
    DIVIDEND_VOUCHER = "dividend_voucher"
    PROPERTY_STATEMENT = "property_statement"
    PRIOR_RETURN = "prior_return"
    LETTER = "letter"
    CERTIFICATE = "certificate"


class IncomeType(str, Enum):
    """Income types"""

    EMPLOYMENT = "employment"
    SELF_EMPLOYMENT = "self_employment"
    PROPERTY = "property"
    DIVIDEND = "dividend"
    INTEREST = "interest"
    OTHER = "other"


class ExpenseType(str, Enum):
    """Expense types"""

    BUSINESS = "business"
    PROPERTY = "property"
    CAPITAL = "capital"
    PERSONAL = "personal"


class PartySubtype(str, Enum):
    """Party subtypes"""

    EMPLOYER = "Employer"
    PAYER = "Payer"
    BANK = "Bank"
    LANDLORD = "Landlord"
    TENANT = "Tenant"
    SUPPLIER = "Supplier"
    CLIENT = "Client"


class PropertyUsage(str, Enum):
    """Property usage types"""

    RESIDENTIAL = "residential"
    FURNISHED_HOLIDAY_LETTING = "furnished_holiday_letting"
    COMMERCIAL = "commercial"
    MIXED = "mixed"


class HealthStatus(str, Enum):
    """Health status values"""

    HEALTHY = "healthy"
    UNHEALTHY = "unhealthy"
    DEGRADED = "degraded"


# Coverage evaluation enums
class Role(str, Enum):
    """Evidence role in coverage evaluation"""

    REQUIRED = "REQUIRED"
    CONDITIONALLY_REQUIRED = "CONDITIONALLY_REQUIRED"
    OPTIONAL = "OPTIONAL"


class Status(str, Enum):
    """Evidence status classification"""

    PRESENT_VERIFIED = "present_verified"
    PRESENT_UNVERIFIED = "present_unverified"
    MISSING = "missing"
    CONFLICTING = "conflicting"


class OverallStatus(str, Enum):
    """Overall coverage status"""

    OK = "ok"
    PARTIAL = "partial"
    BLOCKING = "blocking"
