"""
Модель для отслеживания задач импорта товаров.
"""
from django.db import models


class ProductImportJob(models.Model):
    """
    Задача импорта товаров через Celery.
    Отслеживает прогресс и результаты импорта.
    """
    STATUS_CHOICES = [
        ('pending', 'Ожидает'),
        ('processing', 'Обрабатывается'),
        ('completed', 'Завершён'),
        ('failed', 'Ошибка'),
    ]

    # Celery task ID
    task_id = models.CharField(
        max_length=255,
        unique=True,
        verbose_name="ID задачи Celery"
    )

    # Пользователь
    user = models.ForeignKey(
        'accounts.CustomUser',
        on_delete=models.CASCADE,
        related_name='product_import_jobs',
        verbose_name="Пользователь"
    )

    # Информация о файле
    file_name = models.CharField(
        max_length=255,
        verbose_name="Имя файла"
    )
    file_path = models.CharField(
        max_length=500,
        verbose_name="Путь к файлу",
        help_text="Временный путь для обработки"
    )

    # Параметры импорта
    update_existing = models.BooleanField(
        default=False,
        verbose_name="Обновлять существующие"
    )

    # Статус
    status = models.CharField(
        max_length=20,
        choices=STATUS_CHOICES,
        default='pending',
        db_index=True,
        verbose_name="Статус"
    )

    # Прогресс
    total_rows = models.IntegerField(
        default=0,
        verbose_name="Всего строк"
    )
    processed_rows = models.IntegerField(
        default=0,
        verbose_name="Обработано строк"
    )

    # Результаты
    created_count = models.IntegerField(
        default=0,
        verbose_name="Создано товаров"
    )
    updated_count = models.IntegerField(
        default=0,
        verbose_name="Обновлено товаров"
    )
    skipped_count = models.IntegerField(
        default=0,
        verbose_name="Пропущено"
    )
    errors_count = models.IntegerField(
        default=0,
        verbose_name="Ошибок"
    )

    # Детали ошибок (JSON)
    errors_json = models.JSONField(
        default=list,
        blank=True,
        verbose_name="Детали ошибок"
    )

    # Сообщение об ошибке (если task упал)
    error_message = models.TextField(
        blank=True,
        verbose_name="Сообщение об ошибке"
    )

    # Временные метки
    created_at = models.DateTimeField(
        auto_now_add=True,
        verbose_name="Создано"
    )
    updated_at = models.DateTimeField(
        auto_now=True,
        verbose_name="Обновлено"
    )
    completed_at = models.DateTimeField(
        null=True,
        blank=True,
        verbose_name="Завершено"
    )

    class Meta:
        verbose_name = "Задача импорта товаров"
        verbose_name_plural = "Задачи импорта товаров"
        ordering = ['-created_at']
        indexes = [
            models.Index(fields=['task_id']),
            models.Index(fields=['status', '-created_at']),
            models.Index(fields=['user', '-created_at']),
        ]

    def __str__(self):
        return f"Импорт {self.file_name} ({self.get_status_display()})"

    @property
    def progress_percent(self):
        """Процент выполнения"""
        if self.total_rows == 0:
            return 0
        return int((self.processed_rows / self.total_rows) * 100)

    @property
    def is_finished(self):
        """Завершена ли задача (успешно или с ошибкой)"""
        return self.status in ['completed', 'failed']
