"""
SCM API Permissions — v1.

مجوزهای دسترسی ماژول خرید و تدارکات.

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 SCMBasePermission(BasePermission):
    """مجوز پایه ماژول SCM."""
    module = "scm"
    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 CanManageVendors(SCMBasePermission):
    """مجوز مدیریت تأمین‌کنندگان."""
    resource = "vendor"


class CanManagePR(SCMBasePermission):
    """مجوز مدیریت درخواست خرید."""
    resource = "purchase_requisition"


class CanManageRFQ(SCMBasePermission):
    """مجوز مدیریت استعلام."""
    resource = "rfq"


class CanManagePO(SCMBasePermission):
    """مجوز مدیریت سفارش خرید."""
    resource = "purchase_order"


class CanManageGR(SCMBasePermission):
    """مجوز مدیریت رسید کالا."""
    resource = "goods_receipt"


class CanManageReturn(SCMBasePermission):
    """مجوز مدیریت برگشت از خرید."""
    resource = "purchase_return"


class CanManageEvaluation(SCMBasePermission):
    """مجوز مدیریت ارزیابی تأمین‌کنندگان."""
    resource = "vendor_evaluation"


class CanManagePriceList(SCMBasePermission):
    """مجوز مدیریت لیست قیمت."""
    resource = "price_list"
