from django.db import models


class Warehouse(models.Model):
    """
    Warehouse is a place where items are stored.

    :param name: Name of the warehouse
    :param address: Address of the warehouse
    :param have_freeze: Whether the warehouse have freezer or not
    """
    name = models.CharField(max_length=255)
    address = models.TextField()
    have_freeze = models.BooleanField()

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

class Inventory(models.Model):
    """
    Inventory is in warehouse, It can be a shelf, a room, a container etc.

    :param warehouse: Warehouse that the inventory belongs to
    :param max_stock: Maximum stock of the inventory
    :param min_stock: Minimum stock of the inventory
    :param current_stock: Current stock of the inventory
    """
    warehouse = models.ForeignKey(Warehouse, on_delete=models.CASCADE)
    max_stock = models.IntegerField()
    min_stock = models.IntegerField()
    current_stock = models.IntegerField()

    @property
    def stock_percentage(self):
        return self.current_stock / self.max_stock * 100

    def __str__(self):
        return f"{self.warehouse.name} - {self.stock_percentage}%"

    class Meta:
        verbose_name_plural = 'Inventories'


class Item(models.Model):
    """
    Item such as food, drink, furnoture etc.

    :param inventory: Inventory that the item belongs to
    :param name: Name of the item
    :param description: Description of the item
    :param category: Category of the item
    :param weight: Weight of the item in kg
    :param quantity: Quantity of the item
    """
    inventory = models.ForeignKey(Inventory, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    description = models.TextField()
    category = models.CharField(max_length=255)
    weight = models.DecimalField(max_digits=10, decimal_places=3)
    quantity = models.IntegerField()

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