from django.db import models

from apps.car_stock.constants import CarStockStatus
from coresite.mixin import AbstractTimeStampModel


class CarStock(AbstractTimeStampModel):
    """
    Core inventory model.
    Represents one vehicle in DealerPulse stock.
    """

    vin = models.CharField(
        max_length=32,
        unique=True,
        db_index=True,
        help_text="Vehicle Identification Number"
    )

    stock_number = models.CharField(
        max_length=50,
        unique=True,
        db_index=True,
        help_text="Internal stock number"
    )

    make = models.CharField(max_length=50, db_index=True)
    model = models.CharField(max_length=50, db_index=True)
    year = models.PositiveIntegerField(db_index=True)

    price = models.DecimalField(
        max_digits=12,
        decimal_places=2,
        help_text="Selling price"
    )

    mileage = models.PositiveIntegerField(
        help_text="Mileage in kilometers or miles depending on market"
    )

    color = models.CharField(max_length=50, blank=True)
    fuel_type = models.CharField(max_length=20, blank=True)
    transmission = models.CharField(max_length=20, blank=True)

    status = models.CharField(
        max_length=20,
        choices=CarStockStatus.choices(),
        default=CarStockStatus.STATUS_AVAILABLE,
        db_index=True
    )

    description = models.TextField(blank=True)

    is_active = models.BooleanField(
        default=True,
        help_text="Soft delete flag for enterprise safety"
    )

    class Meta:
        db_table = "car_stock"
        ordering = ["-created_at"]
        verbose_name_plural = "Car Stocks"
        indexes = [
            models.Index(fields=["vin"]),
            models.Index(fields=["stock_number"]),
            models.Index(fields=["status"]),
            models.Index(fields=["make", "model"]),
        ]

    def __str__(self):
        return f"{self.stock_number} | {self.year} {self.make} {self.model}"
