import json
from django.http import HttpResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.permissions import IsAuthenticated
from payrollservice.data.request.empadvancepaymentrequest import EmployeeadvancepaymentRequest
from payrollservice.service.empadvancepaymentservice import EmployeeadvancepaymentService
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 create_employeeadvance_payment(request):
    scope = request.scope
    if request.method == 'POST':
        data_json = json.loads(request.body)
        employee_request = EmployeeadvancepaymentRequest(data_json)
        user_id = request.employee_id
        resp_obj = EmployeeadvancepaymentService(scope).create_employeeadvance_payment(employee_request, user_id)
        response = HttpResponse(resp_obj.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)
        payroll_serv = EmployeeadvancepaymentService(scope).employeeadvance_payment_summary(vys_page)
        response=HttpResponse(payroll_serv.get(), content_type='application/json')
        return response

# Employeeadvancepayment get and delete
@csrf_exempt
@api_view(['GET', 'DELETE'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def employeeadvance_payment_get(request, id_val):
    scope = request.scope
    if request.method == 'GET':
        payroll_serv = EmployeeadvancepaymentService(scope).employeeadvance_payment_get(id_val)
        return HttpResponse(payroll_serv.get(), content_type='application/json')
    elif request.method == 'DELETE':
        payroll_serv = EmployeeadvancepaymentService(scope).employeeadvance_payment_inactive(id_val)
        return HttpResponse(payroll_serv.get(), content_type='application/json')



@csrf_exempt
@api_view(['GET'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def employeeadvance_payment_history(request):
    scope = request.scope
    if request.method == 'GET':
        advance_id = request.GET.get('advance_id')
        payroll_serv = EmployeeadvancepaymentService(scope).employeeadvance_payment_history(advance_id)
        return HttpResponse(payroll_serv.get(), content_type='application/json')