from enum import Enum
from django.db import models


class TRANSFER_STATUS(Enum):
    NOT_TRANSFERRED = 0
    SUCCESSFUL = 1
    FAILED = 2
    OFF_TTIME = 3

class SENTIMENT(Enum):
    NEGATIVE = 0
    POSITIVE = 1
    NEUTRAL = 2
    
class BookingIntent(Enum):
    NO = 0
    YES = 1

class CallTimeCategory(models.IntegerChoices):
    ONTIME = 1, 'Ontime - call received during office hours'
    OFFTIME = 2, 'Offtime - call received after office hours'
    HOLIDAY = 3, 'Holiday - call received during holiday'

    @classmethod
    def model_choices(cls):
        return cls.choices

class BotType(models.IntegerChoices):
    SERVICE_BOT = 1, "Service Bot"
    SALES_BOT = 2, "Sales Bot"
    DEALERSHIP_GROUP_BOT = 3, "Dealership Group Bot"

    @classmethod
    def model_choices(cls):
        return cls.choices

CRON_JOB_STATUS = {
    'NOT_PROCESSED': 0,
    'PROCESSING': 1,
    'COMPLETED': 2,
    'FAILED': 3,
}

class NotificationType(models.IntegerChoices):
    MISSED_CALL = 1, "Missed Call"
    MESSAGE = 2, "Message"

    @classmethod
    def model_choices(cls):
        return cls.choices

class BookingType:
    # Core
    OIL_CHANGE = "oil_change"
    DEALERSHIP_VISIT = "dealership_visit"

    # Major Repairs
    ENGINE_REPAIR_AND_REPLACEMENT = "engine_repair_and_replacement"
    TRANSMISSION_REPAIR_AND_REPLACEMENT = "transmission_repair_and_replacement"
    HEAVY_WARRANTY_WORK = "heavy_warranty_work"
    NON_DRIVABLE_VEHICLE_RECOVERY = "non_drivable_vehicle_recovery"
    ELECTRIC_SYSTEM_OVERHAUL = "electric_system_overhaul"
    SUSPENSION_AND_STEERING_REPLACEMENT = "suspension_and_steering_replacement"
    COOLING_SYSTEM_REBUILD = "cooling_system_rebuild"
    FUEL_SYSTEM_REPAIR = "fuel_system_repair"
    HYBRID_EV_BATTERY_REPLACEMENT_HIGH_VOLTAGE_SYSTEM_REPAIR = (
        "hybrid_ev_battery_replacement_high_voltage_system_repair"
    )

    # Minor Repairs
    ROUTE_ADD_ONS = "route_add_ons"
    BRAKE_SERVICE = "brake_service"
    NOISE_CHECK_AND_DIAGNOSTICS = "noise_check_and_diagnostics"
    TIRE_ROTATION_AND_BALANCING = "tire_rotation_and_balancing"
    FLUID_TOP_OFFS = "fluid_top_offs"
    BATTERY_TESTING_AND_REPLACEMENT = "battery_testing_and_replacement"
    LIGHT_BULB_REPLACEMENT = "light_bulb_replacement"
    WIPER_BLADE_REPLACEMENT = "wiper_blade_replacement"
    AIR_AND_CABIN_FILTER_REPLACEMENT = "air_and_cabin_filter_replacement"
    ALIGNMENT_CHECKS_AND_ADJUSTMENTS = "alignment_checks_and_adjustments"
    SMALL_ACCESSORY_INSTALLS = "small_accessory_installs"

    LABELS = {
        OIL_CHANGE: "Oil Change",
        DEALERSHIP_VISIT: "Dealership Visit",

        # Major Repairs
        ENGINE_REPAIR_AND_REPLACEMENT: "Engine Repair & Replacement",
        TRANSMISSION_REPAIR_AND_REPLACEMENT: "Transmission Repair & Replacement",
        HEAVY_WARRANTY_WORK: "Heavy warranty work",
        NON_DRIVABLE_VEHICLE_RECOVERY: "Non-drivable vehicle recovery & repair",
        ELECTRIC_SYSTEM_OVERHAUL: "Electrical system overhaul",
        SUSPENSION_AND_STEERING_REPLACEMENT: "Suspension & steering system replacement",
        COOLING_SYSTEM_REBUILD: "Cooling system rebuild",
        FUEL_SYSTEM_REPAIR: "Fuel system repair",
        HYBRID_EV_BATTERY_REPLACEMENT_HIGH_VOLTAGE_SYSTEM_REPAIR:
            "Hybrid/EV battery replacement or high-voltage system repair",

        # Minor Repairs
        ROUTE_ADD_ONS: "Route add-ons (custom service requests)",
        BRAKE_SERVICE: "Brake service (pads, rotors, calipers)",
        NOISE_CHECK_AND_DIAGNOSTICS: "Noise check & diagnostics",
        TIRE_ROTATION_AND_BALANCING: "Tire rotations & balancing",
        FLUID_TOP_OFFS: "Fluid top-offs (coolant, transmission, brake, power steering)",
        BATTERY_TESTING_AND_REPLACEMENT: "Battery testing & replacement",
        LIGHT_BULB_REPLACEMENT: "Light bulb replacement (headlights, taillights, interior)",
        WIPER_BLADE_REPLACEMENT: "Wiper blade replacement",
        AIR_AND_CABIN_FILTER_REPLACEMENT: "Air filter & cabin filter replacement",
        ALIGNMENT_CHECKS_AND_ADJUSTMENTS: "Alignment checks & adjustments",
        SMALL_ACCESSORY_INSTALLS:
            "Small accessory installs (phone mounts, dash cams, etc.)",
    }

    @classmethod
    def model_choices(cls):
        return [(key, cls.LABELS[key]) for key in cls.LABELS]

    @classmethod
    def values(cls):
        return set(cls.LABELS.keys())

    @classmethod
    def is_valid(cls, value: str) -> bool:
        return value in cls.values()


# MAJOR_BOOKING_TYPES = {
#     BookingType.ENGINE_REPAIR_AND_REPLACEMENT,
#     BookingType.TRANSMISSION_REPAIR_AND_REPLACEMENT,
#     BookingType.HEAVY_WARRANTY_WORK,
#     BookingType.NON_DRIVABLE_VEHICLE_RECOVERY,
#     BookingType.ELECTRIC_SYSTEM_OVERHAUL,
#     BookingType.SUSPENSION_AND_STEERING_REPLACEMENT,
#     BookingType.COOLING_SYSTEM_REBUILD,
#     BookingType.FUEL_SYSTEM_REPAIR,
#     BookingType.HYBRID_EV_BATTERY_REPLACEMENT_HIGH_VOLTAGE_SYSTEM_REPAIR,
# }
#
# MINOR_BOOKING_TYPES = {
#     BookingType.OIL_CHANGE,
#     BookingType.DEALERSHIP_VISIT,
#     BookingType.ROUTE_ADD_ONS,
#     BookingType.BRAKE_SERVICE,
#     BookingType.NOISE_CHECK_AND_DIAGNOSTICS,
#     BookingType.TIRE_ROTATION_AND_BALANCING,
#     BookingType.FLUID_TOP_OFFS,
#     BookingType.BATTERY_TESTING_AND_REPLACEMENT,
#     BookingType.LIGHT_BULB_REPLACEMENT,
#     BookingType.WIPER_BLADE_REPLACEMENT,
#     BookingType.AIR_AND_CABIN_FILTER_REPLACEMENT,
#     BookingType.ALIGNMENT_CHECKS_AND_ADJUSTMENTS,
#     BookingType.SMALL_ACCESSORY_INSTALLS,
# }
#
# def is_major_booking(booking_type: int | None) -> bool:
#     return booking_type in MAJOR_BOOKING_TYPES
#
# def is_minor_booking(booking_type: int | None) -> bool:
#     return booking_type in MINOR_BOOKING_TYPES
