# gamification/models.py

from django.db import models
from django.contrib.auth.models import User
from store.models import StoreItem
from django.utils import timezone
import datetime
from subjects.models import Subject

# ... (کلاس‌های UserInventory, ActiveBooster, Mission, UserMission, StreakGoal بدون تغییر باقی می‌مانند) ...
class UserInventory(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='inventory')
    item = models.ForeignKey(StoreItem, on_delete=models.CASCADE)
    quantity = models.PositiveIntegerField(default=1)
    class Meta:
        verbose_name_plural = "User Inventories"
        unique_together = ('user', 'item')
    def __str__(self):
        return f"{self.user.username} - {self.item.name} ({self.quantity})"

class ActiveBooster(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='active_boosters')
    item = models.ForeignKey(StoreItem, on_delete=models.CASCADE)
    expires_at = models.DateTimeField(verbose_name="زمان انقضا")
    def is_active(self):
        return timezone.now() < self.expires_at
    def __str__(self):
        return f"بسته فعال {self.item.name} برای {self.user.username}"

class Mission(models.Model):
    MISSION_TYPE_CHOICES = [
        ('EARN_XP', 'کسب امتیاز XP'),
        ('PERFECT_STAGES', 'تکمیل مراحل بدون غلط'),
        ('COMPLETE_STAGES', 'تکمیل تعداد مشخصی مرحله'),
    ]
    title = models.CharField(max_length=100, verbose_name="عنوان ماموریت")
    description = models.TextField(verbose_name="توضیحات")
    mission_type = models.CharField(max_length=50, choices=MISSION_TYPE_CHOICES, verbose_name="نوع ماموریت")
    goal_value = models.PositiveIntegerField(default=1, verbose_name="مقدار هدف")
    
    # --- فیلدهای جوایز اصلاح شد ---
    reward_gems = models.PositiveIntegerField(default=0, verbose_name="جایزه جواهر")
    # فیلد جدید برای جایزه قلب
    reward_hearts = models.PositiveIntegerField(default=0, verbose_name="جایزه قلب")
    # فیلد جایزه آیتم (برای بوسترها و توقف زنجیره)
    reward_item = models.ForeignKey(StoreItem, on_delete=models.SET_NULL, null=True, blank=True, verbose_name="جایزه آیتم (بوستر/توقف زنجیره)")
    # فیلد reward_xp حذف شد
    
    is_active = models.BooleanField(default=True, verbose_name="ماموریت فعال است؟")
    def __str__(self):
        return self.title

class UserMission(models.Model):
    STATUS_CHOICES = [('IN_PROGRESS', 'در حال انجام'), ('COMPLETED', 'تکمیل شده'), ('CLAIMED', 'جایزه دریافت شد')]
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='missions')
    mission = models.ForeignKey(Mission, on_delete=models.CASCADE, related_name='user_instances')
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='IN_PROGRESS')
    current_progress = models.PositiveIntegerField(default=0, verbose_name="پیشرفت فعلی")
    assigned_date = models.DateField(default=datetime.date.today, verbose_name="تاریخ تخصیص")
    class Meta:
        unique_together = ('user', 'mission', 'assigned_date')
    def __str__(self):
        return f"{self.user.username} - {self.mission.title} ({self.get_status_display()})"

class StreakGoal(models.Model):
    title = models.CharField(max_length=100, verbose_name="عنوان هدف (مثلا: قهرمان هفته)")
    duration_days = models.PositiveIntegerField(unique=True, verbose_name="مدت زمان (روز)")
    reward_gems = models.PositiveIntegerField(default=0, verbose_name="جایزه جواهر")
    is_active = models.BooleanField(default=True, verbose_name="هدف فعال است؟")
    class Meta:
        ordering = ['duration_days']
    def __str__(self):
        return f"{self.title} ({self.duration_days} روز)"


class League(models.Model):
    level_number = models.PositiveIntegerField(unique=True, verbose_name="شماره سطح (۱ تا ۱۰)")
    name = models.CharField(max_length=100, verbose_name="نام لیگ")
    icon = models.CharField(max_length=50, blank=True, verbose_name="نام آیکون")
    
    # ✅ *** فیلد جدید برای تصویر کارت اضافه شد ***
    card_image_url = models.URLField(max_length=200, blank=True, null=True, verbose_name="آدرس تصویر کارت")
    
    promotion_spots = models.PositiveIntegerField(default=5, verbose_name="تعداد نفرات صعودکننده")
    demotion_spots = models.PositiveIntegerField(default=5, verbose_name="تعداد نفرات سقوط‌کننده")
    
    class Meta:
        ordering = ['level_number']
        verbose_name = "سطح لیگ"
        verbose_name_plural = "سطوح لیگ"
    
    def __str__(self):
        return f"سطح {self.level_number}: {self.name}"

class LeagueGroup(models.Model):
    league = models.ForeignKey(League, on_delete=models.CASCADE, related_name='groups')
    subject = models.ForeignKey(Subject, on_delete=models.CASCADE, related_name='league_groups')
    week_start_date = models.DateField(verbose_name="تاریخ شروع هفته")
    
    class Meta:
        verbose_name = "گروه لیگ"
        verbose_name_plural = "گروه‌های لیگ"
        
    def __str__(self):
        return f"{self.league.name} - {self.subject.title} - هفته {self.week_start_date}"
