from DepositAPI.api.Api import BaseApiView
from DepositAPI.api.Response import ErrorResponse
from DepositAPI.model.BaseModel import BaseModel
from DepositAPI.model.FeeWeight import FeeWeight as DBModel
from DepositAPI.common.const.hpodconst import ROLE_TYPE

class FeeWeight(BaseApiView, BaseModel):
    def __init__(self):
        self.modelClass = DBModel()

    def add_entry(self, request):
        if self._can_manage_fee(request.user.roleid, request.data.get('UID')):
            return super().add_entry(request)
        return ErrorResponse(status=403, reason="Bạn không có quyền thêm mức phí này.")

    def edit_data(self, request, pk):
        item = self.modelClass.get_object_detail(pk)
        role_id = request.user.roleid
        if item and self._can_manage_fee(role_id, item.get('UID')):
            if role_id != ROLE_TYPE.Admin:
                request.data.pop('UID', None)
            return super().edit_data(request, pk)
        return ErrorResponse(status=403, reason="Bạn không có quyền sửa mức phí này.")

    @staticmethod
    def _can_manage_fee(role_id, customer_id):
        if role_id == ROLE_TYPE.Admin:
            return True
        try:
            return role_id in (ROLE_TYPE.Sale, ROLE_TYPE.CustomerSupport) and int(customer_id) > 0
        except (TypeError, ValueError):
            return False