"""Commission tracking across referral levels."""

from __future__ import annotations

from decimal import Decimal

from django.db import models


class Commission(models.Model):
    """Stores multi-level commissions derived from daily rewards."""

    STATUS_PENDING = "pending"
    STATUS_DISTRIBUTED = "distributed"
    STATUS_CHOICES = [
        (STATUS_PENDING, "Pending"),
        (STATUS_DISTRIBUTED, "Distributed"),
    ]

    upline_user = models.ForeignKey(
        "users.User",
        on_delete=models.CASCADE,
        related_name="commissions_earned",
    )
    downline_user = models.ForeignKey(
        "users.User",
        on_delete=models.CASCADE,
        related_name="commissions_paid",
    )
    reward = models.ForeignKey(
        "investments.Reward",
        on_delete=models.CASCADE,
        related_name="commissions",
    )
    level = models.IntegerField()  # 1, 2, or 3
    commission_rate = models.DecimalField(max_digits=5, decimal_places=2)  # e.g., 50.00 for 50%
    amount = models.DecimalField(max_digits=20, decimal_places=8)
    status = models.CharField(
        max_length=20,
        choices=STATUS_CHOICES,
        default=STATUS_PENDING,
    )
    created_at = models.DateTimeField(auto_now_add=True)
    distributed_at = models.DateTimeField(null=True, blank=True)

    class Meta:
        db_table = "commissions"
        indexes = [
            models.Index(fields=["upline_user", "status"]),
            models.Index(fields=["reward", "level"]),
        ]

    def __str__(self) -> str:
        return f"Commission L{self.level} to {self.upline_user_id} from reward {self.reward_id}"
