from rest_framework import serializers

from apps.mel.reports.models import (
    ComplianceAlert,
    Report,
    ReportArtifact,
    ReportDistribution,
    ReportTemplate,
)


class ReportTemplateSerializer(serializers.ModelSerializer):
    class Meta:
        model = ReportTemplate
        fields = [
            "id", "name", "slug", "description", "report_type", "logframe",
            "sections", "schedule_cron", "is_active", "created_at",
        ]
        read_only_fields = ["id", "created_at"]


class ReportArtifactSerializer(serializers.ModelSerializer):
    class Meta:
        model = ReportArtifact
        fields = ["id", "format", "file", "checksum", "size_bytes", "generated_at"]
        read_only_fields = fields


class ReportSerializer(serializers.ModelSerializer):
    artifacts = ReportArtifactSerializer(many=True, read_only=True)
    template_name = serializers.CharField(source="template.name", read_only=True)

    class Meta:
        model = Report
        fields = [
            "id", "template", "template_name", "period_label", "period_start",
            "period_end", "status", "narrative", "consolidated_data",
            "artifacts", "generated_at", "published_at",
        ]
        read_only_fields = [
            "id", "template_name", "consolidated_data", "artifacts",
            "generated_at", "published_at",
        ]


class ReportDistributionSerializer(serializers.ModelSerializer):
    class Meta:
        model = ReportDistribution
        fields = [
            "id", "report", "recipient_user", "recipient_email", "channel",
            "status", "sent_at", "error", "created_at",
        ]
        read_only_fields = ["id", "sent_at", "created_at"]


class ComplianceAlertSerializer(serializers.ModelSerializer):
    class Meta:
        model = ComplianceAlert
        fields = [
            "id", "report", "indicator", "code", "severity", "message",
            "resolved", "resolved_at", "resolved_by", "created_at",
        ]
        read_only_fields = ["id", "created_at"]
