"""
Task Inbox CQRS Serializers.

Serializers for the task inbox read model and archive.
"""
from rest_framework import serializers

from .models import TaskInboxView, TaskArchive


class TaskInboxSerializer(serializers.ModelSerializer):
    """سریالایزر کارتابل — لیست."""

    class Meta:
        model = TaskInboxView
        fields = [
            "id", "record_id", "title", "description",
            "table_id", "table_name", "table_slug",
            "assigned_to_id", "assigned_to_name", "assigned_to_type",
            "owner_id", "owner_name",
            "module_name", "workflow_name", "workflow_instance_id",
            "status", "priority", "due_date",
            "tags", "display_data",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class TaskInboxStatsSerializer(serializers.Serializer):
    """سریالایزر آمار کارتابل."""
    total = serializers.IntegerField()
    by_status = serializers.DictField(child=serializers.IntegerField())
    by_priority = serializers.DictField(child=serializers.IntegerField())
    overdue = serializers.IntegerField()


class TaskArchiveSerializer(serializers.ModelSerializer):
    """سریالایزر بایگانی."""

    class Meta:
        model = TaskArchive
        fields = [
            "id", "original_record_id",
            "table_id", "table_name",
            "owner_id", "data", "status",
            "workflow_state", "version",
            "archived_at", "archived_reason",
            "original_created_at", "original_updated_at",
        ]
        read_only_fields = fields


class TaskArchiveStatsSerializer(serializers.Serializer):
    """سریالایزر آمار بایگانی."""
    total = serializers.IntegerField()
    by_reason = serializers.DictField(child=serializers.IntegerField())
    by_status = serializers.DictField(child=serializers.IntegerField())
