from datetime import datetime
from django.db import IntegrityError

from payrollservice.data.response.auditresponse import PayrollAuditResponse
from utilityservice.data.response.nwisefinerrorconstants import ErrorMessage, ErrorDescription
from payrollservice.models import Payrollaudit
from utilityservice.data.response.nwisefinerror import NWisefinError
from utilityservice.service.applicationconstants import ApplicationNamespace
from utilityservice.service.threadlocal import NWisefinThread
from utilityservice.data.response.nwisefinsuccess import SuccessStatus, SuccessMessage, NWisefinSuccess
now = datetime.now()
now = str(now)


class AudtiService(NWisefinThread):
    def __init__(self, scope):
        super().__init__(scope)
        self._set_namespace(ApplicationNamespace.PAYROLL_SERVICE)

    def create_audit(self, audit_obj):
        audit_data = Payrollaudit.objects.using(self._current_app_schema()).create(ref_id=audit_obj.ref_id,
                                                                                   ref_type=audit_obj.ref_type,
                                                                                   data=audit_obj.data,
                                                                                   employee_id=audit_obj.user_id,
                                                                                   date=now,
                                                                                   req_status=audit_obj.req_status,
                                                                                   action=audit_obj.action,
                                                                                   entity_id=self._entity_id())
        return

    def audit_function(self, audit_data, refid, emp_id, ref_type, reqstatus):
        # if action == APModifyStatus.DELETE:
        #     data = None
        data = audit_data.__dict__
        del data['_state']
        audit_service = AudtiService(self._scope())
        audit_obj = PayrollAuditResponse()
        audit_obj.set_refid(refid)
        audit_obj.set_reqstatus(reqstatus)
        audit_obj.set_reftype(ref_type)
        audit_obj.set_userid(emp_id)
        # audit_obj.set_action(action)
        audit_obj.set_data(data)
        audit_service.create_audit(audit_obj)