from django.db import models

class StockshelfModel(models.Model):
    warehouse_code = models.CharField(max_length=255, verbose_name="Warehouse code")
    warehouse_name = models.CharField(max_length=255, verbose_name="Warehouse Name")
    shelf_name = models.CharField(max_length=255, verbose_name="Shelf Name")
    shelf_type = models.CharField(max_length=255,default = 'storage', verbose_name="Shelf Type")
    row = models.IntegerField(verbose_name="Row")        # 位置的行号
    col = models.IntegerField(verbose_name="Column")     # 位置的列号
    layer = models.IntegerField(verbose_name="Layer")    # 位置的层号
    ip_address = models.CharField(max_length=255, default = '127.0.0.1',verbose_name="IP Address")
    port = models.IntegerField(default = 8000, verbose_name="Port")
    status = models.CharField(max_length=255, default = 'offline',verbose_name="Status")
    # openid = models.CharField(max_length=255, verbose_name="Openid")
    create_time = models.DateTimeField(auto_now_add=True, verbose_name="Create Time")
    update_time = models.DateTimeField(auto_now=True, blank=True, null=True, verbose_name="Update Time")
    empty_label = models.BooleanField(default=True, verbose_name="Empty Flag")

    shelf_department = models.CharField(max_length=255, default = '货架部门', verbose_name="Shelf Department")
    shelf_status = models.CharField(max_length=255, default = '未满', verbose_name="Shelf Status")
    goods_code = models.CharField(max_length=255,default = 'A010203', verbose_name="Goods Code")
    goods_name = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Name")
    goods_std = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Standard")
    goods_desc = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Description")
    goods_qty = models.BigIntegerField(default=0, verbose_name="Goods Quantity")
    goods_unit = models.CharField(max_length=255,default = '件', verbose_name="Goods Unit")
    goods_price = models.DecimalField(max_digits=10, default=0,decimal_places=2, verbose_name="Goods Price")
    goods_batch = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Batch")
    goods_notes = models.CharField(max_length=255,default = '待填写', verbose_name="Goods Notes")
    goods_in = models.BigIntegerField(default=0, verbose_name="Goods In")
    goods_out = models.BigIntegerField(default=0, verbose_name="Goods Out")




    class Meta:
        db_table = 'shelflist'
        verbose_name = 'Shelf List'
        verbose_name_plural = "Shelf List"
        ordering = ['-id']
        unique_together = ('shelf_name', 'warehouse_code','row', 'col', 'layer')  # 防止重复坐标
    
    def save(self, *args, **kwargs):
        """自动更新 empty_label 状态"""
        self.empty_label = (self.goods_qty == 0)
        super().save(*args, **kwargs)
    
    @classmethod
    def get_existing_positions(cls, warehouse_code,shelf_name, rows, cols, layers):
        """获取已存在的坐标集合"""
        return set(
            cls.objects.filter(
                warehouse_code=warehouse_code,
                shelf_name=shelf_name,
                row__lte=rows,
                col__lte=cols,
                layer__lte=layers
            ).values_list('row', 'col', 'layer')
        )