from django.db import models
from django.conf import settings
import uuid
from django.utils import timezone

# Create your models here.

class UserProfile(models.Model):
    TWIN_TYPE_CHOICES = [
        (0, '正常'),
        (1, '双胞胎大'),
        (2, '双胞胎小'),
    ]
    
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='profile')
    birth_date = models.DateField(null=True, blank=True, verbose_name='出生日期')
    birth_time = models.TimeField(null=True, blank=True, verbose_name='出生时间')
    twin_type = models.IntegerField(choices=TWIN_TYPE_CHOICES, null=True, blank=True, verbose_name='双胞胎类型')
    father_dob = models.DateField(null=True, blank=True, verbose_name='父亲出生日期')
    mother_dob = models.DateField(null=True, blank=True, verbose_name='母亲出生日期')
    can_regenerate_ai = models.BooleanField(default=False, verbose_name='允许重新生成AI分析')
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    class Meta:
        verbose_name = '用户资料'
        verbose_name_plural = '用户资料'

    def __str__(self):
        return f"Profile for {self.user.phone}"

class AccountDeletionRequest(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    token = models.UUIDField(default=uuid.uuid4, editable=False, unique=True)
    created_at = models.DateTimeField(auto_now_add=True)
    expires_at = models.DateTimeField()
    is_active = models.BooleanField(default=True)
    reason = models.TextField(blank=True, null=True)
    # Store contact information at time of request
    contact_email = models.CharField(max_length=50, null=True, blank=True)
    contact_phone = models.CharField(max_length=16, null=True, blank=True)
    
    def save(self, *args, **kwargs):
        # Store contact information when creating the request
        if not self.pk:  # Only on creation
            self.contact_email = self.user.email
            self.contact_phone = self.user.phone
        super().save(*args, **kwargs)
    
    def __str__(self):
        return f"Deletion request for {self.contact_phone} - {'Active' if self.is_active else 'Inactive'}"

class DeletedUser(models.Model):
    original_id = models.IntegerField()
    phone = models.CharField(max_length=16)
    email = models.CharField(max_length=50, null=True, blank=True)
    first_name = models.CharField(max_length=30, blank=True)
    last_name = models.CharField(max_length=30, blank=True)
    date_joined = models.DateTimeField()
    deleted_at = models.DateTimeField(auto_now_add=True)
    reason = models.TextField(blank=True, null=True)
    
    def __str__(self):
        return f"Deleted user: {self.phone}"

class DeletedUserProfile(models.Model):
    deleted_user = models.OneToOneField(DeletedUser, on_delete=models.CASCADE, related_name='deleted_profile')
    original_id = models.IntegerField()
    created_at = models.DateTimeField()
    deleted_at = models.DateTimeField(auto_now_add=True)
    profile_data = models.JSONField(default=dict)  # Stores profile details as JSON
    
    def __str__(self):
        return f"Deleted profile for {self.deleted_user.phone}"
