from django.contrib.auth.models import AbstractUser
from django.db import models
import random
from django.utils import timezone

# ============================================
# مدل کاربر سفارشی (با شماره موبایل)
# ============================================
class User(AbstractUser):
    phone = models.CharField(max_length=11, unique=True, verbose_name="شماره موبایل")
    full_name = models.CharField(max_length=100, blank=True, null=True, verbose_name="نام و نام خانوادگی")
    address = models.TextField(blank=True, null=True, verbose_name="آدرس پستی")
    detailed_address = models.TextField(blank=True, null=True, verbose_name="آدرس دقیق")
    postal_code = models.CharField(max_length=10, blank=True, null=True, verbose_name="کد پستی")
    is_profile_complete = models.BooleanField(default=False, verbose_name="پروفایل تکمیل شده؟")

    USERNAME_FIELD = 'phone'  # ورود با شماره موبایل
    REQUIRED_FIELDS = ['username']  # برای createsuperuser

    def __str__(self):
        return self.phone

    class Meta:
        verbose_name = "کاربر"
        verbose_name_plural = "کاربران"


# ============================================
# مدل کد یکبار مصرف (OTP)
# ============================================
class OTPCode(models.Model):
    phone = models.CharField(max_length=11, verbose_name="شماره موبایل")
    code = models.CharField(max_length=6, verbose_name="کد تایید")
    created_at = models.DateTimeField(auto_now_add=True)
    expires_at = models.DateTimeField(verbose_name="زمان انقضا")
    is_used = models.BooleanField(default=False, verbose_name="استفاده شده؟")

    def save(self, *args, **kwargs):
        if not self.code:
            self.code = str(random.randint(100000, 999999))
        if not self.expires_at:
            self.expires_at = timezone.now() + timezone.timedelta(minutes=2)
        super().save(*args, **kwargs)

    def is_valid(self):
        return not self.is_used and timezone.now() < self.expires_at

    def __str__(self):
        return f"{self.phone} - {self.code}"

    class Meta:
        verbose_name = "کد تایید"
        verbose_name_plural = "کدهای تایید"