from django.db import models

from accounts.models import Workspace


class TimestampedModel(models.Model):
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

    class Meta:
        abstract = True


class Plan(TimestampedModel):
    name = models.CharField(max_length=100)
    price_cents = models.PositiveIntegerField()
    currency = models.CharField(max_length=10, default="usd")
    is_active = models.BooleanField(default=True)
    description = models.TextField(blank=True)
    features = models.JSONField(default=list, blank=True)

    def __str__(self) -> str:
        return f"{self.name} ({self.currency.upper()} {self.price_cents/100:.2f})"

    @property
    def price(self):
        return self.price_cents / 100


class Subscription(TimestampedModel):
    STATUS_CHOICES = [
        ("active", "Active"),
        ("past_due", "Past due"),
        ("canceled", "Canceled"),
    ]

    workspace = models.ForeignKey(Workspace, on_delete=models.CASCADE, related_name="subscriptions")
    plan = models.ForeignKey(Plan, on_delete=models.PROTECT, related_name="subscriptions")
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="active")
    current_period_end = models.DateTimeField(null=True, blank=True)

    def __str__(self) -> str:
        return f"{self.workspace} on {self.plan}"
