import json
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import api_view, permission_classes, authentication_classes
from rest_framework.permissions import IsAuthenticated
from payrollservice.data.request.payrollprocesschangerequest import PayrollprocesschangeRequest
from payrollservice.service.payrollprocesschangeservice import PayrollprocesschangeService
from utilityservice.data.response.nwisefinlist import NWisefinList
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


@csrf_exempt
@api_view(['POST','GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def payrollprocesschange_create(request):
    scope = request.scope
    process_service = PayrollprocesschangeService(scope)
    if request.method == 'POST':
        data_json = json.loads(request.body)
        for payrollprocess in data_json:
            if len(payrollprocess) > 0:
                if payrollprocess['from_date'] < payrollprocess['to_date'] or payrollprocess['from_date'] == payrollprocess['to_date']:
                    process_request = PayrollprocesschangeRequest(payrollprocess)
                    user_id = request.employee_id
                    process_serv=process_service.payrollprocesschange_create(process_request,user_id)
                    response = HttpResponse(process_serv.get(), content_type='application/json')
                else:
                    response1 = json.dumps({'date_message': "select valid from_date and to_date"})
                    response = HttpResponse(response1, content_type="application/json")
                    return response
            else:
                process_serv=NWisefinList()
                response = HttpResponse(process_serv.get(), content_type='application/json')
        return response

    elif request.method == 'GET':
        page = request.GET.get('page', 1)
        page = int(page)
        vys_page = NWisefinPage(page, 10)
        process_serv = process_service.payrollprocesschange_summary(request, vys_page)
        response=HttpResponse(process_serv.get(), content_type='application/json')
        return response

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