"""
Strategy Admin — Django Admin registrations.
"""
from django.contrib import admin
from django.utils.translation import gettext_lazy as _

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,
)


@admin.register(VisionModel)
class VisionAdmin(admin.ModelAdmin):
    list_display = ("title", "status", "time_horizon_start", "time_horizon_end", "owner", "created_at")
    list_filter = ("status",)
    search_fields = ("title", "description")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(StrategicThemeModel)
class StrategicThemeAdmin(admin.ModelAdmin):
    list_display = ("name", "vision", "priority", "status", "owner", "sort_order", "created_at")
    list_filter = ("status", "priority")
    search_fields = ("name", "description")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(ObjectiveModel)
class ObjectiveAdmin(admin.ModelAdmin):
    list_display = ("title", "theme", "level", "status", "progress", "owner", "created_at")
    list_filter = ("status", "level", "time_frame")
    search_fields = ("title", "description")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(KeyResultModel)
class KeyResultAdmin(admin.ModelAdmin):
    list_display = ("title", "objective", "metric_type", "current_value", "target_value", "status", "created_at")
    list_filter = ("status", "metric_type")
    search_fields = ("title",)
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(KeyResultCheckInModel)
class KeyResultCheckInAdmin(admin.ModelAdmin):
    list_display = ("key_result", "value", "confidence", "checked_by", "check_date")
    list_filter = ("confidence",)
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(KPIDefinitionModel)
class KPIDefinitionAdmin(admin.ModelAdmin):
    list_display = ("code", "name", "category", "direction", "frequency", "status", "owner", "created_at")
    list_filter = ("status", "direction", "frequency", "data_source")
    search_fields = ("name", "code", "description")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(KPITargetModel)
class KPITargetAdmin(admin.ModelAdmin):
    list_display = ("kpi", "period_start", "period_end", "target_value", "stretch_value", "created_at")
    list_filter = ("kpi",)
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(KPIActualModel)
class KPIActualAdmin(admin.ModelAdmin):
    list_display = ("kpi", "period_start", "period_end", "actual_value", "source", "recorded_by", "created_at")
    list_filter = ("source", "kpi")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(KPIAssignmentModel)
class KPIAssignmentAdmin(admin.ModelAdmin):
    list_display = ("kpi", "level", "entity_id", "weight", "status", "created_at")
    list_filter = ("status", "level")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(StrategyMapModel)
class StrategyMapAdmin(admin.ModelAdmin):
    list_display = ("name", "version", "status", "created_at")
    list_filter = ("status",)
    search_fields = ("name", "description")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(StrategyMapPerspectiveModel)
class StrategyMapPerspectiveAdmin(admin.ModelAdmin):
    list_display = ("name", "strategy_map", "sort_order", "color", "created_at")
    list_filter = ("strategy_map",)
    search_fields = ("name",)
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(StrategyMapObjectiveModel)
class StrategyMapObjectiveAdmin(admin.ModelAdmin):
    list_display = ("strategy_map", "perspective", "objective", "x_position", "y_position", "created_at")
    list_filter = ("strategy_map", "perspective")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(CausalLinkModel)
class CausalLinkAdmin(admin.ModelAdmin):
    list_display = ("strategy_map", "from_objective", "to_objective", "strength", "created_at")
    list_filter = ("strength", "strategy_map")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(ScorecardModel)
class ScorecardAdmin(admin.ModelAdmin):
    list_display = ("name", "owner", "status", "period_start", "period_end", "created_at")
    list_filter = ("status",)
    search_fields = ("name", "description")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(ScorecardPerspectiveModel)
class ScorecardPerspectiveAdmin(admin.ModelAdmin):
    list_display = ("name", "scorecard", "weight", "sort_order", "created_at")
    list_filter = ("scorecard",)
    search_fields = ("name",)
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(ScorecardMeasureModel)
class ScorecardMeasureAdmin(admin.ModelAdmin):
    list_display = ("perspective", "kpi_assignment", "weight", "target_value", "actual_value", "score", "status", "created_at")
    list_filter = ("status", "perspective")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(GateProcessModel)
class GateProcessAdmin(admin.ModelAdmin):
    list_display = ("name", "applicable_to", "is_active", "created_at")
    list_filter = ("applicable_to", "is_active")
    search_fields = ("name", "description")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(GateModel)
class GateAdmin(admin.ModelAdmin):
    list_display = ("name", "process", "sequence", "created_at")
    list_filter = ("process",)
    search_fields = ("name",)
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(GateReviewModel)
class GateReviewAdmin(admin.ModelAdmin):
    list_display = ("gate", "entity_id", "entity_type", "status", "review_date", "created_at")
    list_filter = ("status", "entity_type")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(GateReviewerModel)
class GateReviewerAdmin(admin.ModelAdmin):
    list_display = ("review", "user", "role", "decision", "created_at")
    list_filter = ("decision",)
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(GateDeliverableModel)
class GateDeliverableAdmin(admin.ModelAdmin):
    list_display = ("review", "name", "status", "document_id", "created_at")
    list_filter = ("status",)
    search_fields = ("name",)
    readonly_fields = ("id", "created_at", "updated_at")


# ═══════════════════════════════════════════════════
# Corporate Policy Management Admin
# ═══════════════════════════════════════════════════

@admin.register(PolicyModel)
class PolicyAdmin(admin.ModelAdmin):
    list_display = ("title", "code", "category", "version", "status", "effective_date", "created_at")
    list_filter = ("status", "category")
    search_fields = ("title", "code")
    readonly_fields = ("id", "created_at", "updated_at")


@admin.register(PolicyAcknowledgmentModel)
class PolicyAcknowledgmentAdmin(admin.ModelAdmin):
    list_display = ("policy", "user", "acknowledged_at", "created_at")
    list_filter = ("acknowledged_at",)
    readonly_fields = ("id", "created_at", "updated_at")
