import enum


class UserRole(str, enum.Enum):
    SUPER_ADMIN = "super_admin"
    ADMIN = "admin"
    AGENT = "agent"


class PolicyStatus(str, enum.Enum):
    DRAFT = "draft"
    ACTIVE = "active"
    EXPIRING_SOON = "expiring_soon"
    EXPIRED = "expired"
    RENEWED = "renewed"
    CANCELLED = "cancelled"


class PolicyCoverageType(str, enum.Enum):
    COMPREHENSIVE = "comprehensive"
    THIRD_PARTY = "third_party"


class PaymentMode(str, enum.Enum):
    CASH = "cash"
    UPI = "upi"
    BANK_TRANSFER = "bank_transfer"
    CHEQUE = "cheque"
    OTHER = "other"


class PaymentStatus(str, enum.Enum):
    PENDING = "pending"
    PARTIAL = "partial"
    PAID = "paid"


class ExtractionStatus(str, enum.Enum):
    SUCCESS = "success"
    PARTIAL = "partial"
    FAILED = "failed"
    DISMISSED = "dismissed"


def extraction_status_value(status: ExtractionStatus | str) -> str:
    if isinstance(status, ExtractionStatus):
        return status.value
    return str(status)


def extraction_status_is(status: ExtractionStatus | str, expected: ExtractionStatus) -> bool:
    return extraction_status_value(status) == expected.value


class WhatsAppLogStatus(str, enum.Enum):
    PENDING = "pending"
    SENT = "sent"
    FAILED = "failed"
    DELIVERED = "delivered"
    READ = "read"


class WhatsAppSendMode(str, enum.Enum):
    MANUAL = "manual"
    AUTOMATIC = "automatic"


class NotificationType(str, enum.Enum):
    EXPIRING_TODAY = "expiring_today"
    EXPIRING_TOMORROW = "expiring_tomorrow"
    EXPIRING_NEXT_WEEK = "expiring_next_week"


class PushPlatform(str, enum.Enum):
    ANDROID = "android"
    IOS = "ios"
