"""
Queue model for AI feedback processing jobs.
"""

from tortoise import fields, models


class AIFeedbackQueue(models.Model):
    """Model for the mip_ai_feedback_queue_tbl table."""

    id = fields.BigIntField(pk=True, description="Job ID")
    user_id = fields.BigIntField(null=True, description="User ID")
    interview_id = fields.IntField(null=True, description="Interview ID")
    question_id = fields.BigIntField(null=True, description="Question ID")
    interview_type = fields.CharField(
        max_length=1,
        null=True,
        description="Interview type (1=general, 2=custom, 3=scripted)",
    )
    video_name = fields.CharField(
        max_length=100, null=True, description="Video file name"
    )
    status = fields.CharField(
        max_length=1,
        null=True,
        default="0",
        description="Job status (0=pending, 1=processing, 2=failed, 3=completed)",
    )
    data_process = fields.CharField(
        max_length=1, default="0", description="Data processing status"
    )
    tries = fields.IntField(default=0, description="Number of processing attempts")
    process_start_time = fields.DatetimeField(
        null=True, description="Processing start time"
    )
    process_end_time = fields.DatetimeField(
        null=True, description="Processing end time"
    )
    duration = fields.CharField(
        max_length=100, null=True, description="Processing duration"
    )
    exception = fields.TextField(null=True, description="Error message if failed")
    created_at = fields.DatetimeField(
        auto_now_add=True, description="Job creation time"
    )

    # Progress tracking fields
    current_step = fields.CharField(
        max_length=100, null=True, description="Current processing step"
    )
    progress_percentage = fields.IntField(
        default=0, description="Progress percentage (0-100)"
    )
    step_start_time = fields.DatetimeField(
        null=True, description="Current step start time"
    )
    last_heartbeat = fields.DatetimeField(
        null=True, description="Last activity timestamp"
    )

    class Meta:
        table = "mip_ai_feedback_queue_tbl"
        table_description = "AI feedback processing queue"

    def __str__(self):
        return f"AIFeedbackQueue(id={self.id}, status={self.status}, video={self.video_name})"

    def to_dict(self):
        """Convert model to dictionary."""
        return {
            "id": self.id,
            "user_id": self.user_id,
            "interview_id": self.interview_id,
            "question_id": self.question_id,
            "interview_type": self.interview_type,
            "video_name": self.video_name,
            "status": self.status,
            "data_process": self.data_process,
            "tries": self.tries,
            "process_start_time": self.process_start_time.isoformat()
            if self.process_start_time
            else None,
            "process_end_time": self.process_end_time.isoformat()
            if self.process_end_time
            else None,
            "duration": self.duration,
            "exception": self.exception,
            "created_at": self.created_at.isoformat() if self.created_at else None,
            "current_step": self.current_step,
            "progress_percentage": self.progress_percentage,
            "step_start_time": self.step_start_time.isoformat()
            if self.step_start_time
            else None,
            "last_heartbeat": self.last_heartbeat.isoformat()
            if self.last_heartbeat
            else None,
        }
