"""
PPM Admin — Django Admin registrations.

ثبت مدل‌های ماژول پرتفولیو و برنامه در پنل ادمین.
"""
from django.contrib import admin
from .infrastructure.persistence.models import (
    PortfolioModel,
    ProgramModel,
    ProgramProjectModel,
    BusinessCaseModel,
    CashFlowProjectionModel,
    ScoringModelModel,
    ScoringCriterionModel,
    ProjectScoreModel,
    BenefitPlanModel,
    BenefitModel,
    BenefitMeasurementModel,
    CapacityPlanModel,
    ResourceDemandModel,
    ResourceSupplyModel,
    CrossProjectDependencyModel,
)


@admin.register(PortfolioModel)
class PortfolioAdmin(admin.ModelAdmin):
    list_display = ["code", "name", "status", "owner", "created_at"]
    list_filter = ["status", "review_cycle", "risk_tolerance"]
    search_fields = ["code", "name"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(ProgramModel)
class ProgramAdmin(admin.ModelAdmin):
    list_display = ["code", "name", "status", "portfolio", "manager", "progress", "created_at"]
    list_filter = ["status", "risk_level", "portfolio"]
    search_fields = ["code", "name", "objectives"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(ProgramProjectModel)
class ProgramProjectAdmin(admin.ModelAdmin):
    list_display = ["program", "project_id", "role", "priority", "created_at"]
    list_filter = ["role"]
    search_fields = ["notes"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(BusinessCaseModel)
class BusinessCaseAdmin(admin.ModelAdmin):
    list_display = ["title", "status", "program", "total_investment", "created_at"]
    list_filter = ["status"]
    search_fields = ["title", "description"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(CashFlowProjectionModel)
class CashFlowProjectionAdmin(admin.ModelAdmin):
    list_display = ["business_case", "year", "investment", "revenue", "savings", "operational_cost", "created_at"]
    list_filter = ["year"]
    search_fields = ["business_case__title"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(ScoringModelModel)
class ScoringModelAdmin(admin.ModelAdmin):
    list_display = ["name", "portfolio", "is_active", "created_at"]
    list_filter = ["is_active"]
    search_fields = ["name", "description"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(ScoringCriterionModel)
class ScoringCriterionAdmin(admin.ModelAdmin):
    list_display = ["name", "scoring_model", "weight", "category", "order", "created_at"]
    list_filter = ["category", "scoring_model"]
    search_fields = ["name", "description"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(ProjectScoreModel)
class ProjectScoreAdmin(admin.ModelAdmin):
    list_display = ["project_id", "scoring_model", "criterion", "score", "scored_by", "scored_at"]
    list_filter = ["scoring_model", "criterion"]
    search_fields = ["justification"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(BenefitPlanModel)
class BenefitPlanAdmin(admin.ModelAdmin):
    list_display = ["name", "program", "portfolio", "is_active", "created_at"]
    list_filter = ["is_active"]
    search_fields = ["name", "description"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(BenefitModel)
class BenefitAdmin(admin.ModelAdmin):
    list_display = ["title", "benefit_plan", "benefit_type", "status", "target_value", "actual_value", "created_at"]
    list_filter = ["benefit_type", "status", "frequency"]
    search_fields = ["title", "description", "category"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(BenefitMeasurementModel)
class BenefitMeasurementAdmin(admin.ModelAdmin):
    list_display = ["benefit", "measurement_date", "value", "measured_by", "created_at"]
    list_filter = ["measurement_date"]
    search_fields = ["notes"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(CapacityPlanModel)
class CapacityPlanAdmin(admin.ModelAdmin):
    list_display = ["name", "portfolio_id", "period_start", "period_end", "is_active", "created_at"]
    list_filter = ["is_active"]
    search_fields = ["name", "description"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(ResourceDemandModel)
class ResourceDemandAdmin(admin.ModelAdmin):
    list_display = ["capacity_plan", "resource_type", "project_id", "demand_hours", "period", "created_at"]
    list_filter = ["resource_type"]
    search_fields = ["resource_type", "notes"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(ResourceSupplyModel)
class ResourceSupplyAdmin(admin.ModelAdmin):
    list_display = ["capacity_plan", "resource_type", "available_hours", "period", "created_at"]
    list_filter = ["resource_type"]
    search_fields = ["resource_type", "notes"]
    readonly_fields = ["id", "created_at", "updated_at"]


@admin.register(CrossProjectDependencyModel)
class CrossProjectDependencyAdmin(admin.ModelAdmin):
    list_display = [
        "predecessor_project_id", "successor_project_id",
        "dependency_type", "lag_days", "status", "created_at",
    ]
    list_filter = ["dependency_type", "status"]
    search_fields = ["impact_description"]
    readonly_fields = ["id", "created_at", "updated_at"]
