"""
PM API Permissions.

مجوزهای سطح API ماژول مدیریت پروژه.

NOTE: Uses PermissionService from the platform's custom RBAC system
instead of Django's built-in has_perm() which only checks auth_permission table.
"""
from rest_framework.permissions import BasePermission

from apps.core.permission.services import PermissionService


class PMBasePermission(BasePermission):
    """مجوز پایه — بررسی عضویت tenant."""
    module = "pm"
    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
        if not self.resource:
            return True

        prefix = f"{self.module}.{self.resource}"
        if request.method in ("GET", "HEAD", "OPTIONS"):
            return PermissionService.has_any_permission(
                request.user,
                [f"{prefix}.list", f"{prefix}.read"],
            )
        return PermissionService.has_any_permission(
            request.user,
            [f"{prefix}.create", f"{prefix}.update", f"{prefix}.delete", f"{prefix}.manage"],
        )


class ProjectPermission(PMBasePermission):
    resource = "project"


class TaskPermission(PMBasePermission):
    resource = "task"


class ResourcePermission(PMBasePermission):
    resource = "resource"


class CostPermission(PMBasePermission):
    resource = "cost"


class RiskPermission(PMBasePermission):
    resource = "risk"


class CalendarPermission(PMBasePermission):
    resource = "calendar"


class IssuePermission(PMBasePermission):
    resource = "issue"


class OBSPermission(PMBasePermission):
    resource = "obs"


class RBSPermission(PMBasePermission):
    resource = "rbs"


class QualityPlanPermission(PMBasePermission):
    resource = "quality_plan"


class InspectionPermission(PMBasePermission):
    resource = "inspection"


class NCRPermission(PMBasePermission):
    resource = "ncr"


class QualityChecklistPermission(PMBasePermission):
    resource = "quality_checklist"


class ProjectDocumentPermission(PMBasePermission):
    resource = "project_document"
