import uuid
from django.db import models
from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    username = models.CharField(max_length=150, null=True, blank=True)
    email = models.EmailField(unique=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['username']

    def __str__(self):
        return self.email
    

class ProductScrapeTask(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="scrape_tasks")
    search_params = models.JSONField(null=True, blank=True, help_text="Parameters used for scraping")
    result_file = models.FileField(upload_to='scraper_results/', null=True, blank=True)
    message = models.CharField(max_length=1000, null=True, blank=True)
    source = models.CharField(max_length=200, null=True, blank=True, choices=[
        ("ALIBABA", "ALIBABA"),
        ("MADE_IN_CHINA","MADE_IN_CHINA"),
        ("1688", "1688"),
        ("TAOBAO", "TAOBAO"),
    ])
    STATUS_CHOICES = [
        ("PENDING", "Pending"),
        ("IN_PROGRESS", "In Progress"),
        ("COMPLETED", "Completed"),
        ("FAILED", "Failed"),
    ]
    status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="PENDING")
    images_status = models.CharField(max_length=20, choices=STATUS_CHOICES, default="PENDING")
    started_at = models.DateTimeField(auto_now_add=True)
    completed_at = models.DateTimeField(null=True, blank=True)

    def __str__(self):
        return f"ScrapeTask({self.user.email}) - {self.id}"

class ProductImage(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    image_url = models.URLField(max_length=500, null=True, blank=True)
    task = models.ForeignKey(
        ProductScrapeTask,
        on_delete=models.CASCADE,
        related_name="images",
        null=True,
        blank=True
    )