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.payrollmastermappingrequest import PayrollmastersmappingRequest
from payrollservice.service.payrollmastermappingservice import PayrollmastermappingService
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_payrollmastermapping(request):
    scope = request.scope
    if request.method == 'POST':
        data_json = json.loads(request.body)
        req_obj = PayrollmastersmappingRequest(data_json)
        user_id = request.employee_id
        payroll_serv = PayrollmastermappingService(scope).create_payrollmastermapping(req_obj, 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 = PayrollmastermappingService(scope).payrollmastermapping_summary(vys_page)
        return HttpResponse(payroll_serv.get(), content_type='application/json')


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


@csrf_exempt
@api_view(['DELETE'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def inactive_payrollmastermapp(request, template_id,segment_id):
    scope = request.scope
    if request.method == 'DELETE':
        payroll_serv = PayrollmastermappingService(scope).inactive_payrollmastermapp(template_id,segment_id)
        return HttpResponse(payroll_serv.get(), content_type='application/json')
