from django.db import models

class ShopifyStore(models.Model):
    """
    Shopify store installation data.

    Used to persist the access token coming from the Shopify app OAuth flow.
    """
    shop_domain = models.CharField(max_length=255, unique=True)
    access_token = models.CharField(max_length=255)
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    def __str__(self) -> str:
        return self.shop_domain


class ShopifyRefundEvent(models.Model):
    """
    Stored Shopify refunds/create webhook payload plus sync outcome.
    """

    topic = models.CharField(max_length=64, db_index=True, default="refunds/create")
    webhook_id = models.CharField(max_length=128, unique=True, db_index=True)
    shopify_order_id = models.CharField(max_length=64, blank=True, db_index=True)
    digistore_order_id = models.CharField(max_length=64, blank=True, db_index=True)
    refund_amount = models.DecimalField(max_digits=12, decimal_places=2, null=True, blank=True)
    refund_type = models.CharField(max_length=16, blank=True)  # partial | full
    payload = models.JSONField()
    processed = models.BooleanField(default=False)
    error = models.TextField(blank=True, default="")
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ["-created_at"]

    def __str__(self) -> str:
        return f"{self.topic} #{self.webhook_id}"


class ShopifyFulfillmentEvent(models.Model):
    """
    Stored Shopify fulfillments/create|update webhook payload plus sync outcome.
    """

    topic = models.CharField(max_length=64, db_index=True, default="fulfillments/create")
    webhook_id = models.CharField(max_length=128, unique=True, db_index=True)
    shopify_order_id = models.CharField(max_length=64, blank=True, db_index=True)
    digistore_order_id = models.CharField(max_length=64, blank=True, db_index=True)
    tracking_number = models.CharField(max_length=128, blank=True)
    parcel_service = models.CharField(max_length=64, blank=True)
    tracking_url = models.TextField(blank=True, default="")
    notify_via_email = models.BooleanField(default=False)
    payload = models.JSONField()
    processed = models.BooleanField(default=False)
    error = models.TextField(blank=True, default="")
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        ordering = ["-created_at"]

    def __str__(self) -> str:
        return f"{self.topic} #{self.webhook_id}"
