from django.db import models

from api.models.data.base import BaseModel
from api.models.data.raw_material_process import RawMaterialProcess


class StorageTank(BaseModel):
    name = models.CharField(max_length=255, unique=True)
    capacity_liters = models.DecimalField(max_digits=12, decimal_places=4)

    class Meta:
        ordering = ['name', 'id']

    def __str__(self):
        return self.name


class ProductionStorageTransfer(BaseModel):
    production = models.ForeignKey(
        RawMaterialProcess,
        on_delete=models.CASCADE,
        related_name='storage_transfers',
    )
    storage_tank = models.ForeignKey(
        StorageTank,
        on_delete=models.PROTECT,
        related_name='production_transfers',
    )
    quantity_liters = models.DecimalField(max_digits=12, decimal_places=4)

    class Meta:
        ordering = ['id']
        constraints = [
            models.UniqueConstraint(
                fields=['production', 'storage_tank'],
                name='uniq_production_storage_tank_transfer',
            ),
        ]

    def __str__(self):
        return f'{self.production} -> {self.storage_tank} ({self.quantity_liters} L)'
