from zoneinfo import ZoneInfo

from django.db import models


class Variation(models.Model):
    vid = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=255)

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


class Order(models.Model):
    orderid = models.IntegerField(primary_key=True)
    # date of the order creation
    date = models.DateTimeField()
    # status
    status = models.FloatField()
    # order total net
    totalnet = models.FloatField()
    # order total gross
    totalgross = models.FloatField()
    # shipping profile id
    shippingprofile = models.IntegerField()
    # originating platform/shop name
    origin = models.FloatField()

    class Meta:
        ordering = ["date"]
        get_latest_by = "date"

    def __str__(self):
        orderdateiso = self.date.astimezone(ZoneInfo("Europe/Berlin")).isoformat()
        return f"[{self.orderid} {orderdateiso}] "


class OrderItem(models.Model):
    # original unique orderitem key from plenty
    orderitemid = models.IntegerField(primary_key=True)
    variation = models.ForeignKey(Variation, on_delete=models.PROTECT)
    # quantity of ordered items
    quantity = models.IntegerField()
    # order this OrderItem belongs to
    order = models.ForeignKey(Order, on_delete=models.PROTECT)

    def __str__(self):
        orderdateiso = self.order.date.astimezone(ZoneInfo("Europe/Berlin")).isoformat()
        return (
            f"[{self.order.orderid} {orderdateiso}] "
            f"{self.variation.vid} {self.variation.name} {self.quantity}"
        )
