import uuid
from django.db import models

class Package(models.Model):
    """Represents available internet data bundles"""
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    name = models.CharField(max_length=100)
    data_amount = models.CharField(max_length=50)  # e.g., "10GB"
    duration_days = models.IntegerField()  # e.g., 7, 21, 31
    price = models.DecimalField(max_digits=6, decimal_places=2)  # e.g., 200.00

    def __str__(self):
        return f"{self.name} - {self.data_amount} ({self.duration_days} Days)"

class Transaction(models.Model):
    """Tracks M-Pesa payment transactions"""
    STATUS_CHOICES = (
        ('pending', 'Pending'),
        ('successful', 'Successful'),
        ('failed', 'Failed'),
    )

    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    phone_number = models.CharField(max_length=15)
    package = models.ForeignKey(Package, on_delete=models.CASCADE)
    amount = models.DecimalField(max_digits=6, decimal_places=2)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='pending')
    mpesa_code = models.CharField(max_length=100, blank=True, null=True)
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.phone_number} - {self.package.name} ({self.status})"

# class MpesaTransactionConfig(models.Model):
#     business_shortcode = models.CharField(max_length=20, verbose_name="Business Shortcode", null=True, blank=True)
#     password = models.CharField(max_length=255, verbose_name="Password", null=True, blank=True)
#     timestamp = models.CharField(max_length=14, verbose_name="Timestamp", null=True, blank=True)
#     transaction_type = models.CharField(
#         max_length=50, default="CustomerBuyGoodsOnline", verbose_name="Transaction Type", null=True, blank=True
#     )
#     amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="Amount", null=True, blank=True)
#     party_a = models.CharField(max_length=15, verbose_name="Party A (Phone Number)", null=True, blank=True)
#     party_b = models.IntegerField(default=3110928, verbose_name="Party B (Till Number)", null=True, blank=True)
#     phone_number = models.CharField(max_length=15, verbose_name="Phone Number", null=True, blank=True)
#     callback_url = models.URLField(verbose_name="Callback URL", null=True, blank=True)
#     account_reference = models.CharField(max_length=100, default="DataPlanPayment", null=True, blank=True)
#     transaction_desc = models.CharField(max_length=255, default="Payment for Data Plan", null=True, blank=True)

#     created_at = models.DateTimeField(auto_now_add=True)

#     def __str__(self):
#         return f"MPESA Config ({self.created_at})"
class MpesaTransactionConfig(models.Model):
    business_shortcode = models.CharField(max_length=10, null=True, blank=True)
    party_b = models.CharField(max_length=10, null=True, blank=True)  # Till Number
    transaction_type = models.CharField(max_length=50, default="CustomerBuyGoodsOnline", null=True, blank=True)
    is_active = models.BooleanField(default=True)  # To get the active configuration
    created_at = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return f"{self.business_shortcode} - {self.party_b}"
