from django.db import models
from django.conf import settings


class KandegeRound(models.Model):
    """A single Kandege round - plane takes off, multiplier grows, crashes."""
    STATUS_CHOICES = [
        ("waiting", "Waiting"),    # accepting bets
        ("flying",  "Flying"),     # plane in air, multiplier growing
        ("crashed", "Crashed"),    # round over
    ]
    status       = models.CharField(max_length=20, choices=STATUS_CHOICES, default="waiting")
    crash_point  = models.FloatField()           # e.g. 2.45 — when plane crashes
    multiplier   = models.FloatField(default=1.0) # current multiplier
    started_at   = models.DateTimeField(null=True, blank=True)
    crashed_at   = models.DateTimeField(null=True, blank=True)
    created_at   = models.DateTimeField(auto_now_add=True)

    class Meta:
        ordering = ["-created_at"]

    def __str__(self):
        return f"Round {self.id} — crash@{self.crash_point}x ({self.status})"


class KandegeBet(models.Model):
    """A player's bet on a round."""
    round        = models.ForeignKey(KandegeRound, on_delete=models.CASCADE, related_name="bets")
    user         = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="kandege_bets")
    amount       = models.IntegerField()          # bet amount in points
    auto_cashout = models.FloatField(null=True, blank=True)  # auto cash out at this multiplier
    cashed_out   = models.BooleanField(default=False)
    cashout_at   = models.FloatField(null=True, blank=True)  # multiplier when cashed out
    winnings     = models.IntegerField(default=0)
    created_at   = models.DateTimeField(auto_now_add=True)

    class Meta:
        unique_together = [("round", "user")]


class KandegeLimit(models.Model):
    """Responsible gaming limits per user."""
    user         = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="kandege_limit")
    daily_limit  = models.IntegerField(default=5000)   # max pts per day
    excluded     = models.BooleanField(default=False)   # self-excluded
    excluded_until = models.DateTimeField(null=True, blank=True)  # temp exclusion
    created_at   = models.DateTimeField(auto_now_add=True)
    updated_at   = models.DateTimeField(auto_now=True)
