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.service.payrolltranservice import PayrolltranService
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 payrolltran_summary(request):
    scope = request.scope
    # if request.method == 'POST':
    #     data_json = json.loads(request.body)
    #     user_id = request.employee_id
    #     req_obj = EmployeeadvancedetailsRequest(data_json)
    #     payroll_serv = PayrolltranService(scope).create_payrolltran(req_obj, user_id)
    #     return HttpResponse(payroll_serv.get(), content_type='application/json')
    if request.method == 'GET':
        page = request.GET.get('page', 1)
        page = int(page)
        vys_page = NWisefinPage(page, 10)
        payroll_serv = PayrolltranService(scope).payrolltran_summary(vys_page)
        return HttpResponse(payroll_serv.get(), content_type='application/json')

# Payrolltran get and delete
@csrf_exempt
@api_view(['GET', 'DELETE'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def payrolltran_get(request, id_val):
    scope = request.scope
    if request.method == 'GET':
        payroll_serv = PayrolltranService(scope).payrolltran_get(id_val)
        return HttpResponse(payroll_serv.get(), content_type='application/json')
    elif request.method == 'DELETE':
        payroll_serv = PayrolltranService(scope).payrolltran_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 tran_history_data(request, id):
    scope = request.scope
    if request.method == 'GET':
        payroll_serv = PayrolltranService(scope).tran_history_data(id)
        response = HttpResponse(payroll_serv.get(), content_type='application/json')
        return response


@csrf_exempt
@api_view(['GET','POST'])
@authentication_classes([NWisefinAuthentication])
@permission_classes([IsAuthenticated, NWisefinPermission])
def advance_approving_level_data(request):
    scope = request.scope
    if request.method == 'GET':
        user_id = request.employee_id
        adv_id = request.GET.get('advance_id')
        # adv_status = request.GET.get('advance_status')
        tran_status = request.GET.get('tran_status')
        tran_to = request.GET.get('to_employee_id')
        remarks = request.GET.get('remarks')
        if tran_to is None:
            tran_to = user_id
        payroll_serv = PayrolltranService(scope).advance_approving_level_data(adv_id, user_id,tran_status,tran_to,remarks)
        return HttpResponse(payroll_serv.get(), content_type='application/json')
    elif request.method == 'POST':
        data_json = json.loads(request.body)
        user_id = request.employee_id
        payroll_serv = PayrolltranService(scope).advance_approve_data(user_id, data_json)
        return HttpResponse(payroll_serv.get(), content_type='application/json')