"""
Strategy API v1 — Serializers.
"""
from rest_framework import serializers
from ...infrastructure.persistence.models import (
    VisionModel, StrategicThemeModel,
    ObjectiveModel, KeyResultModel, KeyResultCheckInModel,
    KPIDefinitionModel, KPITargetModel, KPIActualModel, KPIAssignmentModel,
    StrategyMapModel, StrategyMapPerspectiveModel,
    StrategyMapObjectiveModel, CausalLinkModel,
    ScorecardModel, ScorecardPerspectiveModel, ScorecardMeasureModel,
    GateProcessModel, GateModel, GateReviewModel,
    GateReviewerModel, GateDeliverableModel,
    PolicyModel, PolicyAcknowledgmentModel,
    ObjectivePortfolioAlignmentModel,
)


# ═══════════════════════════════════════════════════
# Vision Serializers
# ═══════════════════════════════════════════════════

class VisionListSerializer(serializers.ModelSerializer):
    class Meta:
        model = VisionModel
        fields = [
            "id", "title", "description",
            "time_horizon_start", "time_horizon_end",
            "status", "owner", "tags",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class VisionDetailSerializer(serializers.ModelSerializer):
    themes_count = serializers.IntegerField(
        source="themes.count", read_only=True,
    )

    class Meta:
        model = VisionModel
        fields = [
            "id", "title", "description",
            "time_horizon_start", "time_horizon_end",
            "status", "owner", "tags", "metadata",
            "themes_count",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class VisionCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = VisionModel
        fields = [
            "title", "description",
            "time_horizon_start", "time_horizon_end",
            "owner", "tags", "metadata",
        ]


class VisionStatusSerializer(serializers.Serializer):
    action = serializers.ChoiceField(choices=["activate", "archive"])


# ═══════════════════════════════════════════════════
# StrategicTheme Serializers
# ═══════════════════════════════════════════════════

class StrategicThemeListSerializer(serializers.ModelSerializer):
    vision_title = serializers.CharField(
        source="vision.title", read_only=True,
    )

    class Meta:
        model = StrategicThemeModel
        fields = [
            "id", "vision", "vision_title",
            "name", "description",
            "priority", "status",
            "owner", "start_date", "end_date",
            "sort_order", "tags",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class StrategicThemeDetailSerializer(serializers.ModelSerializer):
    vision_title = serializers.CharField(
        source="vision.title", read_only=True,
    )

    class Meta:
        model = StrategicThemeModel
        fields = [
            "id", "vision", "vision_title",
            "name", "description",
            "priority", "status",
            "owner", "start_date", "end_date",
            "sort_order", "tags", "metadata",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class StrategicThemeCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = StrategicThemeModel
        fields = [
            "vision", "name", "description",
            "priority", "owner",
            "start_date", "end_date",
            "sort_order", "tags", "metadata",
        ]


class ThemeStatusSerializer(serializers.Serializer):
    action = serializers.ChoiceField(choices=["activate", "complete", "archive"])


# ═══════════════════════════════════════════════════
# Objective Serializers
# ═══════════════════════════════════════════════════

class ObjectiveListSerializer(serializers.ModelSerializer):
    theme_name = serializers.CharField(source="theme.name", read_only=True, default="")

    class Meta:
        model = ObjectiveModel
        fields = [
            "id", "theme", "theme_name", "parent",
            "title", "description",
            "level", "time_frame",
            "period_start", "period_end",
            "status", "weight", "progress",
            "owner", "tags",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class ObjectiveDetailSerializer(serializers.ModelSerializer):
    theme_name = serializers.CharField(source="theme.name", read_only=True, default="")
    key_results_count = serializers.IntegerField(source="key_results.count", read_only=True)
    children_count = serializers.IntegerField(source="children.count", read_only=True)

    class Meta:
        model = ObjectiveModel
        fields = [
            "id", "theme", "theme_name", "parent",
            "title", "description",
            "level", "time_frame",
            "period_start", "period_end",
            "status", "weight", "progress",
            "owner", "tags", "metadata",
            "key_results_count", "children_count",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class ObjectiveCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = ObjectiveModel
        fields = [
            "theme", "parent",
            "title", "description",
            "level", "time_frame",
            "period_start", "period_end",
            "weight", "owner", "tags", "metadata",
        ]


class ObjectiveStatusSerializer(serializers.Serializer):
    action = serializers.ChoiceField(choices=["activate", "achieve", "miss", "at_risk"])


# ═══════════════════════════════════════════════════
# KeyResult Serializers
# ═══════════════════════════════════════════════════

class KeyResultListSerializer(serializers.ModelSerializer):
    objective_title = serializers.CharField(source="objective.title", read_only=True)

    class Meta:
        model = KeyResultModel
        fields = [
            "id", "objective", "objective_title",
            "title", "metric_type",
            "start_value", "target_value", "current_value",
            "weight", "status",
            "owner", "due_date",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class KeyResultDetailSerializer(serializers.ModelSerializer):
    objective_title = serializers.CharField(source="objective.title", read_only=True)
    check_ins_count = serializers.IntegerField(source="check_ins.count", read_only=True)

    class Meta:
        model = KeyResultModel
        fields = [
            "id", "objective", "objective_title",
            "title", "metric_type",
            "start_value", "target_value", "current_value",
            "weight", "status",
            "owner", "due_date", "metadata",
            "check_ins_count",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class KeyResultCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = KeyResultModel
        fields = [
            "objective", "title", "metric_type",
            "start_value", "target_value",
            "weight", "owner", "due_date", "metadata",
        ]


# ═══════════════════════════════════════════════════
# CheckIn Serializers
# ═══════════════════════════════════════════════════

class CheckInListSerializer(serializers.ModelSerializer):
    class Meta:
        model = KeyResultCheckInModel
        fields = [
            "id", "key_result",
            "value", "confidence", "notes",
            "checked_by", "check_date",
            "created_at",
        ]
        read_only_fields = fields


class CheckInCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = KeyResultCheckInModel
        fields = [
            "key_result", "value",
            "confidence", "notes",
        ]


# ═══════════════════════════════════════════════════
# Analysis Serializers
# ═══════════════════════════════════════════════════

class ObjectiveProgressSerializer(serializers.Serializer):
    objective_id = serializers.UUIDField()
    weighted_progress = serializers.DecimalField(max_digits=5, decimal_places=2)
    key_results_count = serializers.IntegerField()
    completed_count = serializers.IntegerField()
    at_risk_count = serializers.IntegerField()


class CascadeProgressSerializer(serializers.Serializer):
    objective_id = serializers.UUIDField()
    own_progress = serializers.DecimalField(max_digits=5, decimal_places=2)
    children_progress = serializers.DecimalField(max_digits=5, decimal_places=2)
    combined_progress = serializers.DecimalField(max_digits=5, decimal_places=2)
    children_count = serializers.IntegerField()


# ═══════════════════════════════════════════════════
# KPI Definition Serializers
# ═══════════════════════════════════════════════════

class KPIDefinitionListSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPIDefinitionModel
        fields = [
            "id", "name", "code", "category", "direction",
            "frequency", "data_source", "status",
            "owner", "created_at",
        ]


class KPIDefinitionDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPIDefinitionModel
        fields = [
            "id", "name", "code", "description", "category",
            "unit_of_measure", "direction", "frequency", "data_source",
            "formula", "threshold_red", "threshold_yellow", "threshold_green",
            "owner", "responsible_role", "status",
            "tags", "metadata", "created_at", "updated_at",
        ]


class KPIDefinitionCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPIDefinitionModel
        fields = [
            "name", "code", "description", "category",
            "unit_of_measure", "direction", "frequency", "data_source",
            "formula", "threshold_red", "threshold_yellow", "threshold_green",
            "owner", "responsible_role", "tags", "metadata",
        ]


class KPIStatusSerializer(serializers.Serializer):
    status = serializers.ChoiceField(choices=["draft", "active", "archived"])


# ═══════════════════════════════════════════════════
# KPI Target Serializers
# ═══════════════════════════════════════════════════

class KPITargetListSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPITargetModel
        fields = [
            "id", "kpi", "period_start", "period_end",
            "target_value", "stretch_value", "created_at",
        ]


class KPITargetDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPITargetModel
        fields = [
            "id", "kpi", "period_start", "period_end",
            "target_value", "stretch_value",
            "notes", "metadata", "created_at", "updated_at",
        ]


class KPITargetCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPITargetModel
        fields = [
            "kpi", "period_start", "period_end",
            "target_value", "stretch_value", "notes", "metadata",
        ]


# ═══════════════════════════════════════════════════
# KPI Actual Serializers
# ═══════════════════════════════════════════════════

class KPIActualListSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPIActualModel
        fields = [
            "id", "kpi", "period_start", "period_end",
            "actual_value", "source", "recorded_by", "created_at",
        ]


class KPIActualDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPIActualModel
        fields = [
            "id", "kpi", "period_start", "period_end",
            "actual_value", "notes", "source", "recorded_by",
            "metadata", "created_at", "updated_at",
        ]


class KPIActualCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPIActualModel
        fields = [
            "kpi", "period_start", "period_end",
            "actual_value", "notes", "source", "metadata",
        ]


# ═══════════════════════════════════════════════════
# KPI Assignment Serializers
# ═══════════════════════════════════════════════════

class KPIAssignmentListSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPIAssignmentModel
        fields = [
            "id", "kpi", "level", "entity_id",
            "weight", "status", "created_at",
        ]


class KPIAssignmentDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPIAssignmentModel
        fields = [
            "id", "kpi", "level", "entity_id",
            "weight", "status",
            "notes", "metadata", "created_at", "updated_at",
        ]


class KPIAssignmentCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = KPIAssignmentModel
        fields = [
            "kpi", "level", "entity_id",
            "weight", "notes", "metadata",
        ]


# ═══════════════════════════════════════════════════
# KPI Score / Trend Serializers
# ═══════════════════════════════════════════════════

class KPIScoreSerializer(serializers.Serializer):
    kpi_id = serializers.UUIDField()
    actual_value = serializers.FloatField()
    target_value = serializers.FloatField()
    achievement_rate = serializers.FloatField()
    rag_status = serializers.CharField()


class KPITrendSerializer(serializers.Serializer):
    kpi_id = serializers.UUIDField()
    slope = serializers.FloatField()
    direction = serializers.CharField()
    forecast_next = serializers.FloatField(allow_null=True)
    points = serializers.ListField(child=serializers.DictField(), required=False)


# ═══════════════════════════════════════════════════
# Strategy Map Serializers
# ═══════════════════════════════════════════════════

class StrategyMapListSerializer(serializers.ModelSerializer):
    class Meta:
        model = StrategyMapModel
        fields = [
            "id", "name", "description", "version",
            "status", "created_at", "updated_at",
        ]
        read_only_fields = fields


class StrategyMapDetailSerializer(serializers.ModelSerializer):
    perspectives_count = serializers.IntegerField(
        source="perspectives.count", read_only=True,
    )
    objectives_count = serializers.IntegerField(
        source="map_objectives.count", read_only=True,
    )
    links_count = serializers.IntegerField(
        source="causal_links.count", read_only=True,
    )

    class Meta:
        model = StrategyMapModel
        fields = [
            "id", "name", "description", "version",
            "status", "metadata",
            "perspectives_count", "objectives_count", "links_count",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class StrategyMapCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = StrategyMapModel
        fields = ["name", "description", "metadata"]


class StrategyMapStatusSerializer(serializers.Serializer):
    status = serializers.ChoiceField(choices=["draft", "published", "archived"])


# ═══════════════════════════════════════════════════
# Map Perspective Serializers
# ═══════════════════════════════════════════════════

class PerspectiveListSerializer(serializers.ModelSerializer):
    class Meta:
        model = StrategyMapPerspectiveModel
        fields = [
            "id", "strategy_map", "name", "description",
            "sort_order", "color", "created_at",
        ]
        read_only_fields = fields


class PerspectiveDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = StrategyMapPerspectiveModel
        fields = [
            "id", "strategy_map", "name", "description",
            "sort_order", "color", "metadata",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class PerspectiveCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = StrategyMapPerspectiveModel
        fields = [
            "strategy_map", "name", "description",
            "sort_order", "color", "metadata",
        ]


# ═══════════════════════════════════════════════════
# Map Objective Serializers
# ═══════════════════════════════════════════════════

class MapObjectiveListSerializer(serializers.ModelSerializer):
    class Meta:
        model = StrategyMapObjectiveModel
        fields = [
            "id", "strategy_map", "perspective", "objective",
            "x_position", "y_position", "created_at",
        ]
        read_only_fields = fields


class MapObjectiveDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = StrategyMapObjectiveModel
        fields = [
            "id", "strategy_map", "perspective", "objective",
            "x_position", "y_position", "metadata",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class MapObjectiveCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = StrategyMapObjectiveModel
        fields = [
            "strategy_map", "perspective", "objective",
            "x_position", "y_position", "metadata",
        ]


# ═══════════════════════════════════════════════════
# Causal Link Serializers
# ═══════════════════════════════════════════════════

class CausalLinkListSerializer(serializers.ModelSerializer):
    class Meta:
        model = CausalLinkModel
        fields = [
            "id", "strategy_map", "from_objective", "to_objective",
            "strength", "created_at",
        ]
        read_only_fields = fields


class CausalLinkDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = CausalLinkModel
        fields = [
            "id", "strategy_map", "from_objective", "to_objective",
            "strength", "description", "metadata",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class CausalLinkCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = CausalLinkModel
        fields = [
            "strategy_map", "from_objective", "to_objective",
            "strength", "description", "metadata",
        ]


# ═══════════════════════════════════════════════════
# Scorecard Serializers
# ═══════════════════════════════════════════════════

class ScorecardListSerializer(serializers.ModelSerializer):
    class Meta:
        model = ScorecardModel
        fields = [
            "id", "name", "description", "owner",
            "period_start", "period_end", "status",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class ScorecardDetailSerializer(serializers.ModelSerializer):
    perspectives_count = serializers.IntegerField(
        source="sc_perspectives.count", read_only=True,
    )

    class Meta:
        model = ScorecardModel
        fields = [
            "id", "name", "description", "owner",
            "period_start", "period_end", "status", "metadata",
            "perspectives_count",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class ScorecardCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = ScorecardModel
        fields = [
            "name", "description", "owner",
            "period_start", "period_end", "metadata",
        ]


class ScorecardStatusSerializer(serializers.Serializer):
    status = serializers.ChoiceField(choices=["draft", "active", "closed", "archived"])


# ═══════════════════════════════════════════════════
# Scorecard Perspective Serializers
# ═══════════════════════════════════════════════════

class ScPerspectiveListSerializer(serializers.ModelSerializer):
    class Meta:
        model = ScorecardPerspectiveModel
        fields = [
            "id", "scorecard", "name", "weight",
            "sort_order", "created_at",
        ]
        read_only_fields = fields


class ScPerspectiveDetailSerializer(serializers.ModelSerializer):
    measures_count = serializers.IntegerField(
        source="measures.count", read_only=True,
    )

    class Meta:
        model = ScorecardPerspectiveModel
        fields = [
            "id", "scorecard", "name", "weight",
            "sort_order", "metadata", "measures_count",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class ScPerspectiveCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = ScorecardPerspectiveModel
        fields = [
            "scorecard", "name", "weight",
            "sort_order", "metadata",
        ]


# ═══════════════════════════════════════════════════
# Scorecard Measure Serializers
# ═══════════════════════════════════════════════════

class ScMeasureListSerializer(serializers.ModelSerializer):
    class Meta:
        model = ScorecardMeasureModel
        fields = [
            "id", "perspective", "kpi_assignment",
            "weight", "target_value", "actual_value",
            "score", "status", "created_at",
        ]
        read_only_fields = fields


class ScMeasureDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = ScorecardMeasureModel
        fields = [
            "id", "perspective", "kpi_assignment",
            "weight", "target_value", "actual_value",
            "score", "status", "metadata",
            "created_at", "updated_at",
        ]
        read_only_fields = fields


class ScMeasureCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = ScorecardMeasureModel
        fields = [
            "perspective", "kpi_assignment",
            "weight", "target_value", "actual_value",
            "metadata",
        ]


# ═══════════════════════════════════════════════════
# Scorecard Report Serializers
# ═══════════════════════════════════════════════════

class PerspectiveScoreSerializer(serializers.Serializer):
    perspective_id = serializers.UUIDField()
    name = serializers.CharField()
    weight = serializers.FloatField()
    score = serializers.FloatField()
    weighted_score = serializers.FloatField()
    measure_count = serializers.IntegerField()


class ScorecardReportSerializer(serializers.Serializer):
    scorecard_id = serializers.UUIDField()
    overall_score = serializers.FloatField()
    perspectives = PerspectiveScoreSerializer(many=True)


# ═══════════════════════════════════════════════════
# Stage-Gate Governance Serializers
# ═══════════════════════════════════════════════════

# ─── GateProcess Serializers ─────────────────────

class GateProcessListSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateProcessModel
        fields = ["id", "name", "applicable_to", "is_active", "created_at"]


class GateProcessDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateProcessModel
        fields = [
            "id", "name", "description", "applicable_to", "is_active",
            "metadata", "created_at", "updated_at",
        ]


class GateProcessCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateProcessModel
        fields = ["name", "description", "applicable_to"]


# ─── Gate Serializers ────────────────────────────

class GateListSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateModel
        fields = ["id", "process", "name", "sequence", "created_at"]


class GateDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateModel
        fields = [
            "id", "process", "name", "sequence", "description",
            "mandatory_deliverables", "criteria", "metadata",
            "created_at", "updated_at",
        ]


class GateCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateModel
        fields = ["process", "name", "sequence", "description", "mandatory_deliverables", "criteria"]


# ─── GateReview Serializers ──────────────────────

class GateReviewListSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateReviewModel
        fields = ["id", "gate", "entity_id", "entity_type", "status", "review_date", "created_at"]


class GateReviewDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateReviewModel
        fields = [
            "id", "gate", "entity_id", "entity_type", "status",
            "review_date", "notes", "metadata", "created_at", "updated_at",
        ]


class GateReviewCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateReviewModel
        fields = ["gate", "entity_id", "entity_type", "review_date", "notes"]


class GateReviewStatusSerializer(serializers.Serializer):
    action = serializers.ChoiceField(choices=[
        ("start", "شروع بررسی"),
        ("approve", "تأیید"),
        ("conditional", "تأیید مشروط"),
        ("reject", "رد"),
    ])


# ─── GateReviewer Serializers ────────────────────

class GateReviewerListSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateReviewerModel
        fields = ["id", "review", "user", "role", "decision", "created_at"]


class GateReviewerDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateReviewerModel
        fields = [
            "id", "review", "user", "role", "decision",
            "comments", "metadata", "created_at", "updated_at",
        ]


class GateReviewerCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateReviewerModel
        fields = ["review", "user", "role"]


# ─── GateDeliverable Serializers ─────────────────

class GateDeliverableListSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateDeliverableModel
        fields = ["id", "review", "name", "status", "document_id", "created_at"]


class GateDeliverableDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateDeliverableModel
        fields = [
            "id", "review", "name", "status", "document_id",
            "metadata", "created_at", "updated_at",
        ]


class GateDeliverableCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = GateDeliverableModel
        fields = ["review", "name", "document_id"]


# ═══════════════════════════════════════════════════
# Corporate Policy Management Serializers
# ═══════════════════════════════════════════════════

# ─── Policy Serializers ──────────────────────────

class PolicyListSerializer(serializers.ModelSerializer):
    class Meta:
        model = PolicyModel
        fields = ["id", "title", "code", "category", "version", "status", "effective_date", "created_at"]


class PolicyDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = PolicyModel
        fields = [
            "id", "title", "code", "category", "content", "version",
            "status", "effective_date", "review_date",
            "owner", "approver", "document_id",
            "metadata", "created_at", "updated_at",
        ]


class PolicyCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = PolicyModel
        fields = [
            "title", "code", "category", "content",
            "effective_date", "review_date",
            "owner", "approver", "document_id",
        ]


class PolicyStatusSerializer(serializers.Serializer):
    status = serializers.ChoiceField(choices=["active", "under_review", "retired"])


# ─── Policy Acknowledgment Serializers ───────────

class PolicyAckListSerializer(serializers.ModelSerializer):
    class Meta:
        model = PolicyAcknowledgmentModel
        fields = ["id", "policy", "user", "acknowledged_at", "created_at"]


class PolicyAckDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = PolicyAcknowledgmentModel
        fields = [
            "id", "policy", "user", "acknowledged_at",
            "metadata", "created_at", "updated_at",
        ]


class PolicyAckCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = PolicyAcknowledgmentModel
        fields = ["policy", "user", "acknowledged_at"]


# ═══════════════════════════════════════════════════
# Alignment Serializers
# ═══════════════════════════════════════════════════

class AlignmentListSerializer(serializers.ModelSerializer):
    class Meta:
        model = ObjectivePortfolioAlignmentModel
        fields = [
            "id", "objective", "portfolio_id", "alignment_level",
            "strategic_fit_score", "weight", "is_active", "created_at",
        ]


class AlignmentDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = ObjectivePortfolioAlignmentModel
        fields = "__all__"


class AlignmentCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = ObjectivePortfolioAlignmentModel
        fields = [
            "objective", "portfolio_id", "alignment_level",
            "strategic_fit_score", "weight", "notes",
        ]


class StrategicFitScoreSerializer(serializers.Serializer):
    """Serializer for strategic fit score calculation response."""
    portfolio_id = serializers.UUIDField()
    total_score = serializers.DecimalField(max_digits=5, decimal_places=2)
    aligned_objectives_count = serializers.IntegerField()
    alignment_details = serializers.ListField(child=serializers.DictField())
