from django.db import models


class Good(models.Model):
    code = models.CharField(max_length=100, unique=True)
    name = models.CharField(max_length=255)
    barcode = models.CharField(max_length=100, blank=True)
    item_type = models.CharField(max_length=100, blank=True)
    unit = models.CharField(max_length=100, blank=True)
    sub_unit = models.CharField(max_length=100, blank=True)
    conversion_factor = models.DecimalField(max_digits=18, decimal_places=6, default=1)
    stock = models.DecimalField(max_digits=18, decimal_places=3, default=0)
    buy_price = models.DecimalField(max_digits=18, decimal_places=2, default=0)
    sell_price = models.DecimalField(max_digits=18, decimal_places=2, default=0)
    purchases_title = models.CharField(max_length=255, blank=True)
    sales_title = models.CharField(max_length=255, blank=True)
    node_family = models.CharField(max_length=500, blank=True)
    tag = models.CharField(max_length=255, blank=True)
    description = models.TextField(blank=True)
    product_code = models.CharField(max_length=100, blank=True)
    active = models.BooleanField(default=True)
    tax_id = models.CharField(max_length=100, blank=True)
    tax_unit = models.CharField(max_length=100, blank=True)
    reorder_point = models.DecimalField(max_digits=18, decimal_places=3, default=0)
    lead_time = models.PositiveIntegerField(default=0)
    minimum_order = models.DecimalField(max_digits=18, decimal_places=3, default=0)
    warehousing_rate = models.DecimalField(max_digits=18, decimal_places=2, default=0)
    first_period_balance = models.DecimalField(max_digits=18, decimal_places=3, default=0)
    minimum_physical_inventory = models.DecimalField(max_digits=18, decimal_places=3, default=0)
    price_list = models.JSONField(default=list, blank=True)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ["name", "code"]
        verbose_name = "Good"
        verbose_name_plural = "Goods"

    def __str__(self):
        return f"{self.code} - {self.name}"
