from DepositAPI.api.Api import BaseApiView
from DepositAPI.api.Response import SuccessResponse, ErrorResponse
from DepositAPI.model.BaseModel import BaseModel
from DepositAPI.model.StoreManager import StoreManager as StoreManagerModel
from DepositAPI.model.BigPackageVN import BigPackageVN as BigPackageModel


class BigPackageVN(BaseApiView, BaseModel):

    def aggregate_data(self, request):
        self.get_request_info(request)
        self.get_common_query_string(request)

        not_transit = self.params.get("not_tran", "")
        if not_transit == "true":
            items = BigPackageModel.get_all_not_transit(self)
            totalRow = len(items)
        else:
            items, totalRow = BigPackageModel.get_list(self, self.filter, self.quickFilter, self.sortBy, self.descending, self.rowsPerPage, self.offset, self.user_id, self.role_id)
        return SuccessResponse(
            data=items, total=totalRow, offset=self.offset, rowsPerPage=self.rowsPerPage
        )
    
    def get_item_detail(self, request, pk):
        self.get_request_info(request)
        self.get_common_query_string(request)

        item = BigPackageModel.get_detail(self, pk)
        item["Packages"] = StoreManagerModel.get_package_by_bpvnid(self, item["ID"], self.sortBy, self.descending, self.rowsPerPage, self.offset)
        return SuccessResponse(data=item)
    
    def get_list_by_ref(self, request):
        self.get_request_info(request)
        self.get_common_query_string(request)
        ref_id = self.params.get("ref_id", "")
        items, totalRow = BigPackageModel.get_list_by_ref(self, ref_id, self.sortBy, self.descending, self.rowsPerPage, self.offset)
        return SuccessResponse(
            data=items, total=totalRow, offset=self.offset, rowsPerPage=self.rowsPerPage
        )

    def edit_data(self, request, pk):
        try:
            ret = BigPackageModel.update(self, request, pk)
            return SuccessResponse(data=ret)
        except Exception as e:
            return ErrorResponse(status=500, reason = str(e))

    def add_entry(self, request):
        try:
            item = BigPackageModel.insert(self, request)
            return SuccessResponse( data=item )
        except Exception as e:
            return ErrorResponse(status=500, reason = str(e))

    def remove_entry(self, request, pk):
        try:
            BigPackageModel.remove(self, pk)
            return SuccessResponse( data={"status": True} )
        except Exception as e:
            return ErrorResponse(status=500, reason = str(e))
        