from rest_framework import serializers

from apps.mel.feedback.models import (
    CourseEvaluation,
    FeedbackChannel,
    FeedbackSubmission,
    TracerResponse,
    TracerStudy,
)


class FeedbackChannelSerializer(serializers.ModelSerializer):
    class Meta:
        model = FeedbackChannel
        fields = [
            "id", "type", "name", "slug", "description",
            "is_public", "is_active", "opens_at", "closes_at", "created_at",
        ]
        read_only_fields = ["id", "created_at"]


class FeedbackSubmissionSerializer(serializers.ModelSerializer):
    class Meta:
        model = FeedbackSubmission
        fields = [
            "id", "channel", "submitter_user", "submitter_email", "submitter_name",
            "rating", "narrative", "severity", "status",
            "submission_key", "corrective_action", "created_at", "triaged_at",
        ]
        read_only_fields = ["id", "corrective_action", "created_at", "triaged_at"]


class TracerStudySerializer(serializers.ModelSerializer):
    class Meta:
        model = TracerStudy
        fields = ["id", "name", "slug", "description", "target_population",
                  "opens_at", "closes_at", "is_active", "created_at"]


class TracerResponseSerializer(serializers.ModelSerializer):
    class Meta:
        model = TracerResponse
        fields = [
            "id", "study", "respondent_email", "respondent_name",
            "employment_status", "employer", "role", "salary_band",
            "payload", "submitted_at",
        ]
        read_only_fields = ["id", "submitted_at"]


class CourseEvaluationSerializer(serializers.ModelSerializer):
    class Meta:
        model = CourseEvaluation
        fields = [
            "id", "source_system", "course_slug", "course_name",
            "period_label", "aggregate_score", "response_count",
            "payload", "ingested_at",
        ]
        read_only_fields = ["id", "ingested_at"]
