"""
Strategy API v1 — Permissions.
"""
from rest_framework.permissions import BasePermission


class StrategyBasePermission(BasePermission):
    """Base permission for Strategy module."""
    resource = ""

    def has_permission(self, request, view):
        if not request.user or not request.user.is_authenticated:
            return False
        if request.user.is_superuser:
            return True

        action_map = {
            "list": "list",
            "retrieve": "read",
            "create": "create",
            "update": "update",
            "partial_update": "update",
            "destroy": "delete",
        }
        action = action_map.get(view.action, view.action)
        perm = f"strategy.{self.resource}.{action}"
        return request.user.has_perm(perm)


class VisionPermission(StrategyBasePermission):
    resource = "vision"


class StrategicThemePermission(StrategyBasePermission):
    resource = "strategic_theme"


class ObjectivePermission(StrategyBasePermission):
    resource = "objective"


class KeyResultPermission(StrategyBasePermission):
    resource = "key_result"


class CheckInPermission(StrategyBasePermission):
    resource = "check_in"


class KPIDefinitionPermission(StrategyBasePermission):
    resource = "kpi_definition"


class KPITargetPermission(StrategyBasePermission):
    resource = "kpi_target"


class KPIActualPermission(StrategyBasePermission):
    resource = "kpi_actual"


class KPIAssignmentPermission(StrategyBasePermission):
    resource = "kpi_assignment"


class StrategyMapPermission(StrategyBasePermission):
    resource = "strategy_map"


class MapPerspectivePermission(StrategyBasePermission):
    resource = "map_perspective"


class MapObjectivePermission(StrategyBasePermission):
    resource = "map_objective"


class CausalLinkPermission(StrategyBasePermission):
    resource = "causal_link"


class ScorecardPermission(StrategyBasePermission):
    resource = "scorecard"


class ScPerspectivePermission(StrategyBasePermission):
    resource = "sc_perspective"


class ScMeasurePermission(StrategyBasePermission):
    resource = "sc_measure"


# ─── Stage-Gate Permissions ───────────────────────

class GateProcessPermission(StrategyBasePermission):
    resource = "gate_process"


class GatePermission(StrategyBasePermission):
    resource = "gate"


class GateReviewPermission(StrategyBasePermission):
    resource = "gate_review"


class GateReviewerPermission(StrategyBasePermission):
    resource = "gate_reviewer"


class GateDeliverablePermission(StrategyBasePermission):
    resource = "gate_deliverable"


# ─── Corporate Policy Permissions ─────────────────

class PolicyPermission(StrategyBasePermission):
    resource = "policy"


class PolicyAcknowledgmentPermission(StrategyBasePermission):
    resource = "policy_acknowledgment"


class AlignmentPermission(StrategyBasePermission):
    resource = "alignment"
