import json

from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.permissions import IsAuthenticated

from payrollservice.data.request.paycomponentsegmentmappingrequest import PaycomponentsegmentmappingRequest
from payrollservice.service.paycomponentsegmentmappingservice import PayrollSegementMappingService
from utilityservice.data.response.nwisefinpage import NWisefinPage
# from utilityservice.service.nwisefinauthenticate import NWisefinAuthentication
from common_middleware.request_middleware import NWisefinAuthentication
from utilityservice.service.nwisefinpermission import NWisefinPermission
from rest_framework.decorators import api_view, authentication_classes, permission_classes


@csrf_exempt
@api_view(['POST', 'GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def create_paycompseg_mapping(request):
    scope = request.scope
    if request.method == 'POST':
        data_json = json.loads(request.body)
        req_data = PaycomponentsegmentmappingRequest(data_json)
        user_id = request.employee_id
        payroll_serv = PayrollSegementMappingService(scope).create_paycompseg_mapping(req_data,user_id)
        return HttpResponse(payroll_serv.get(), content_type='application/json')

    elif request.method == 'GET':
        page = request.GET.get('page', 1)
        page = int(page)
        vys_page = NWisefinPage(page, 10)
        payroll_serv = PayrollSegementMappingService(scope).paycompsegmapping_summary(vys_page,request)
        return HttpResponse(payroll_serv.get(), content_type='application/json')

@csrf_exempt
@api_view(['GET','DELETE'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def get_paysegment_data(request, id):
    scope = request.scope
    if request.method == 'GET':
        payroll_serv = PayrollSegementMappingService(scope).get_paysegment_data(id)
        return HttpResponse(payroll_serv.get(), content_type='application/json')
    elif request.method == 'DELETE':
        payroll_serv = PayrollSegementMappingService(scope).inactivate_paysegemaping(id)
        return HttpResponse(payroll_serv.get(), content_type='application/json')