from django.db import models
from django.core.validators import MinValueValidator
from decimal import Decimal

class Client(models.Model):
    name = models.CharField("Имя", max_length=255)
    club_card_number = models.CharField("Номер клубной карты", max_length=100, unique=True)
    telegram_id = models.CharField("Telegram ID", max_length=50, blank=True, null=True)
    bot_admin = models.BooleanField(default=False, help_text="Является ли пользователь администратором бота")
    chat_disabled = models.BooleanField(
        default=False,
        verbose_name="Блокировка отправки сообщений",
        help_text="Если установлено, пользователь не может отправлять сообщения в чат."
    )
    def __str__(self):
        return f"{self.name} ({self.club_card_number})"

    class Meta:
        verbose_name = "Клиент"
        verbose_name_plural = "Клиенты"

class Invoice(models.Model):
    # Поля, полученные из API
    api_id = models.CharField("API Invoice ID", max_length=255, unique=True) 
    invoice_type = models.CharField("Type", max_length=50, default="Invoice")
    created_at = models.DateTimeField("Created at")
    closed_at = models.DateTimeField("Closed at", null=True, blank=True) 
    ext_id = models.CharField("External ID", max_length=255, blank=True, null=True)
    ext_type = models.CharField("External Type", max_length=255, blank=True, null=True)
    
    # Данные клиента, полученные из объекта "client"
    client_api_id = models.CharField("Client API ID", max_length=255, blank=True, null=True) 
    client_type = models.CharField("Client Type", max_length=50, blank=True, null=True)
    client_name = models.CharField("Client Name", max_length=255, blank=True, null=True)
    client_club_card_number = models.CharField("Club Card Number", max_length=100, blank=True, null=True)
    
    # Финансовые поля
    sum = models.DecimalField("Sum", max_digits=10, decimal_places=2, default=Decimal("0.00"),
                              validators=[MinValueValidator(Decimal("0.00"))])
    company_number = models.PositiveIntegerField("Company Number", default=0)
    bonus = models.DecimalField("Bonus", max_digits=10, decimal_places=2, null=True, blank=True,
                                validators=[MinValueValidator(Decimal("0.00"))])
    start_bonus = models.DecimalField("Start Bonus", max_digits=10, decimal_places=2, null=True, blank=True,
                                      validators=[MinValueValidator(Decimal("0.00"))])
    deposit_sum = models.DecimalField("Deposit Sum", max_digits=10, decimal_places=2, default=Decimal("0.00"),
                                      validators=[MinValueValidator(Decimal("0.00"))])
    notes = models.TextField("Notes", blank=True, null=True)
    used = models.BooleanField(default=False, verbose_name="Использован в розыгрыше")
    def __str__(self):
        return f"{self.ext_id} / {self.client_name or 'Unknown Client'} ({self.client_club_card_number})"
    
    class Meta:
        verbose_name = "Счет"
        verbose_name_plural = "Счета"
        ordering = ['-created_at']


class APISettings(models.Model):
    api_url = models.URLField("API URL")
    api_key = models.CharField("API KEY", max_length=255)
    class Meta:
        verbose_name = "Настройка API"
        verbose_name_plural = "Настройки API"
        

    def __str__(self):
        return f"Настройки API: {self.api_url}"
class BindingRequest(models.Model):
    STATUS_CHOICES = (
        ('pending', 'Ожидает проверки'),
        ('approved', 'Подтверждён'),
        ('rejected', 'Отклонён'),
    )
    
    telegram_chat_id = models.CharField(max_length=50, help_text="Идентификатор чата Telegram пользователя")
    client_card = models.CharField(max_length=100, help_text="Номер клиентской карты")
    client = models.ForeignKey(Client, on_delete=models.SET_NULL, null=True, blank=True)
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='pending')
    created_at = models.DateTimeField(auto_now_add=True)
    processed_at = models.DateTimeField(null=True, blank=True)
    
    def __str__(self):
        return f"КК: {self.client_card} | Статус: {self.get_status_display()}"
    
    class Meta:
        verbose_name = "Запрос на сопоставление"
        verbose_name_plural = "Запросы на сопоставления"