import json

from payrollservice.util.userutil import date_to_m_sec
from payrollservice.util.userutil import DesignationType
from payrollservice.util.userutil import NoticePeriodUtil
from payrollservice.util.userutil import workmode_type, statuschangeutil, Employee_type


class EmployeeResponse:
    id = None
    first_name = None
    middle_name = None
    last_name = None
    full_name = None
    code = None
    department = None
    grade = None
    designation = None
    user_id = None
    email_id = None
    mobile_number = None
    dob = None
    doj = None
    gender = None
    phone_no = None
    employee_type = None
    supervisor = None
    hierarchy = None
    branch = None
    costcentre = None
    businesssegment = None
    srlno = None
    accountnumber = None
    grade1 = None
    grade1_date = None
    grade2 = None
    grade2_date = None
    noticeperiod = None
    role = None
    department_id =None
    employee_branch_id = None
    limit = None
    employee_name = None
    manager=None
    expected_doj = None
    org_id = None
    functional_head = None
    work_mode = None
    effective_from = None
    approve_status = None
    candidate_code = None
    employment_type = None
    employeebank_id=None
    pf_number = None
    esi_number = None
    payroll_date = None
    aadhar_number = None
    uan_number = None
    pan_number = None
    
    def get(self):
        return json.dumps(self, default=lambda o: o.__dict__,
                          sort_keys=True, indent=4)

    def set_id(self, id):
        self.id = id

    def set_mobilenumber(self, mobile_number):
        self.mobile_number = mobile_number

    def set_first_name(self, first_name):
        self.first_name = first_name
    def set_employee_name(self, employee_name):
        self.employee_name = employee_name

    def set_middle_name(self, middle_name):
        self.middle_name = middle_name

    def set_last_name(self, last_name):
        self.last_name = last_name

    def set_full_name(self, full_name):
        self.full_name = full_name

    def set_email_id(self, email_id):
        self.email_id = email_id

    def set_code(self, code):
        self.code = code

    def set_department(self, department):
        self.department = department

    def set_emp_designation(self, designation,arr):
        self.designation=None
        # if designation!=None:
        for i in arr:
            if i['id'] == designation:
                self.designation = i
                break

    def set_designation(self, designation):
        self.designation = designation

    def set_grade(self, grade):
        self.grade = grade

    def set_user(self, user):
        self.user = user

    def set_gender(self, gender):
        self.gender = gender

    def set_branch_gst(self, branch_gst):
        self.branch_gst = branch_gst

    def set_phone_no(self, phone_no):
        self.phone_no = phone_no

    def set_employee_type(self, employee_type):
        self.employee_type = Employee_type(employee_type)

    def set_supervisor(self, supervisor):
        self.supervisor = supervisor

    def set_hierarchy(self, hierarchy):
        self.hierarchy = hierarchy

    def set_branch(self, branch):
        self.branch = branch

    def set_emp_branch(self, branch,arr):
        self.report_branch = None
        for i in arr:
            if i['id'] == branch:
                self.report_branch = i
                break

    def set_costcentre(self, costcentre):
        self.costcentre = costcentre

    def set_emp_costcentre(self,costcentre,arr):
        self.costcentre = None
        for i in arr:
            if i['id'] == costcentre:
                self.costcentre = i
                break
    def set_pay_emp_costcentre(self,costcentre,arr):
        self.costcentre = None
        for i in arr:
            if i['id'] == costcentre:
                self.costcentre = i['name']
                break

    def set_businesssegment(self, businesssegment):
        self.businesssegment = businesssegment

    def set_emp_businesssegment(self, businesssegment, arr):
        self.businesssegment = None
        for i in arr:
            if i['id'] == businesssegment:
                self.businesssegment = i
                break

    def set_pay_emp_businesssegment(self, businesssegment, arr):
        self.businesssegment = None
        for i in arr:
            if i['id'] == businesssegment:
                self.businesssegment = i['name']
                break
    def set_manager(self, manager):
        self.manager = manager

    def set_address_id(self, address_id):
        self.address_id = address_id

    def set_contact_id(self, contact_id):
        self.contact_id = contact_id

    def set_dob(self, dob):
        dob = date_to_m_sec(dob)
        self.dob = dob

    def set_doj(self, doj):
        doj = date_to_m_sec(doj)
        self.doj = (doj)

    def set_accountnumber(self, accountnumber):
        self.accountnumber = accountnumber

    def set_grade1(self, grade1):
        self.grade1 = grade1

    def set_grade1_date(self, grade1_date):
        grade1_date = str(grade1_date)
        self.grade1_date = grade1_date

    def set_grade2(self, grade2):
        self.grade2 = grade2

    def set_grade2_date(self, grade2_date):
        grade2_date = str(grade2_date)
        self.grade2_date = grade2_date

    def set_noticeperiod(self, noticeperiod_id):
        self.noticeperiod = None
        if noticeperiod_id!=None:
            noticedict=NoticePeriodUtil().notice_type(noticeperiod_id)
            self.noticeperiod = noticedict

    def set_role(self, role):
        self.role = role

    def set_emp_department_id(self, department_id,dept_arr):
        self.department_id=None
        if department_id!=None:
            for i in dept_arr:
                if i['id'] == int(department_id):
                    self.department_id = i
                    break

    def set_department_id(self, department_id):
        self.department_id = department_id



    def set_approve_status(self, approve_status):
        self.approve_status = approve_status

    def set_employee_branch_id(self, employee_branch_id):
        self.employee_branch_id = employee_branch_id

    def set_emp_employee_branch_id(self, employee_branch_id,arr):
        self.employee_branch_id = employee_branch_id
        for i in arr:
            if i['id'] == employee_branch_id:
                self.employee_branch_id = i
                break
    def set_employee_branch_name(self, employee_branch_name):
        self.employee_branch_name = employee_branch_name
    def set_team(self, team):
        self.team = team
    def set_sub_team(self, sub_team):
        self.sub_team = sub_team

    def set_limit(self, limit):
        self.limit = limit

    def set_employeebank_id(self, employeebank_id):
        self.employeebank_id = employeebank_id

    def set_employeebank_val(self,employeebank_id,arr):
        self.employeebank = None
        for i in arr:
            if i.id == employeebank_id:
                self.employeebank = i
                break

    def get_id(self):
        return self.id

    def get_first_name(self):
        return self.first_name

    def get_middle_name(self):
        return self.middle_name

    def get_last_name(self):
        return self.last_name

    def get_full_name(self):
        return self.full_name

    def get_code(self):
        return self.code

    def get_department(self):
        return self.department

    def get_grade(self):
        return self.grade

    def get_designation(self):
        return self.designation

    def get_user(self):
        return self.user

    def get_accountnumber(self):
        return self.accountnumber

    def get_grade1(self):
        return self.grade1

    def get_grade1_date(self):
        return self.grade1_date

    def get_grade2(self):
        return self.grade2

    def get_grade2_date(self):
        return self.grade2_date

    def get_noticeperiod(self):
        return self.noticeperiod

    def get_role(self):
        return self.role

    def set_expected_doj(self, expected_doj):
        self.expected_doj = str(expected_doj)

    def set_org_id(self, org_id):
        self.org_id = org_id

    def set_emp_functional_head(self, functional_head,arr):
        self.functional_head = None
        if arr != None:
            for i in arr:
                if i.id == functional_head:
                    self.functional_head = i
                    break
        else:
            self.functional_head = None

    def set_functional_head(self, functional_head):
        self.functional_head = functional_head

    def set_work_mode(self, work_mode):
        self.work_mode = workmode_type(work_mode)

    def set_effective_from(self, effective_from):
        self.effective_from = str(effective_from)

    def set_candidate_code(self, candidate_code):
        self.candidate_code = candidate_code

    def set_employment_type(self, employment_type):
        self.employment_type = Employee_type(employment_type)

    def set_pf_number(self, pf_number):
        self.pf_number = pf_number

    def set_esi_number(self, esi_number):
        self.esi_number = esi_number

    def set_grade_val(self,grade_id,arr):
        self.grade = None
        for i in arr:
            if i.id == grade_id:
                self.grade = i
                break

    def set_payroll_date(self, payroll_date):
        self.payroll_date = str(payroll_date)

    def set_bank_id(self, bank_id):
        self.bank_id = bank_id

    def set_branch_id(self, branch_id):
        self.branch_id = branch_id


    def set_employeebank_val1(self,employee_id,arr):
        self.employeebank = None
        for i in arr:
            if i.employee_id_id == employee_id:
                self.employeebank = i
                break

    def set_role_data(self,role):
        if role is not None and role != '':
            self.role = DesignationType.role_dict.get(int(role))
        else:
            self.role = role

    def set_noticeperiod_val(self,noticeperiod):
        self.noticeperiod = statuschangeutil(noticeperiod)



    def set_aadhar_number(self,aadhar_number):
        self.aadhar_number = aadhar_number

    def set_uan_number(self,uan_number):
        self.uan_number = uan_number

    def set_pan_number(self,pan_number):
        self.pan_number = pan_number

class EmployeeRoleResponse :
    role_id = None
    role = None
    empolyee_id = None

    def set_role_id(self, role_id):
        self.role_id = role_id

    def set_role(self, role):
        self.role = role

    def set_employee_id(self, employee_id):
        self.employee_id = employee_id
class EmployeeMobieResponse :
    id = None
    code = None
    mobile_number = None

    def set_mobile_number(self, mobile_number):
        self.mobile_number = mobile_number

    def set_id(self, id):
        self.id = id

    def set_code(self, code):
        self.code = code

    def get(self):
        return json.dumps(self, default=lambda o: o.__dict__,
                          sort_keys=True, indent=4)

class EmployeeLogResponse :
    id = None
    maindata = None
    range_to = None
    range_from = None

    def get(self):
        return json.dumps(self, default=lambda o: o.__dict__,
                          sort_keys=True, indent=4)

    def set_id(self, id):
        self.id = id


    def set_maindata(self, maindata):
        self.maindata = maindata
    def set_range_from(self, range_from):
        self.range_from = range_from
    def set_range_to(self, range_to):
        self.range_to = range_to
class empdepartmentres:
    id=None
    code=None
    name=None
    def get(self):
        return json.dumps(self, default=lambda o: o.__dict__,
                         sort_keys=True, indent=4)
    def set_id(self,id):
        self.id=id
    def set_code(self,code):
        self.code=code
    def set_name(self,name):
        self.name=name


# TA Dependents api call
class Employee_data_resp:
    id= None
    employeeid= None
    branchid= None
    employee_name=None
    employee_code=None
    employee_designation=None
    bankgstno=None
    bank_name=None

    def set_id(self,id):
        self.id=id
    def set_approver(self,approver):
        self.approver=approver
    def set_employeeid(self,employeeid):
        self.employeeid=employeeid
    def set_employee_branch_id(self,employee_branch_id):
        self.employee_branch_id=employee_branch_id
    def set_name(self,name):
        self.name=name
    def set_code(self,code):
        self.code=code
    def set_grade(self,grade):
        self.grade=grade
    def set_designation(self,designation):
        self.designation=designation
    def set_bankgstno(self,bankgstno):
        self.bankgstno=bankgstno
    def set_bank_name(self,bank_name):
        self.bank_name=bank_name


    def get(self):
        return json.dumps(self, default=lambda o: o.__dict__,
                         sort_keys=True, indent=4)



class EmployeeBankResponse:
    id=None
    employee_id=None
    bank_id=None
    branch_id=None
    accountnumber=None

    def get(self):
        return json.dumps(self, default=lambda o: o.__dict__,
                         sort_keys=True, indent=4)

    def set_id(self,id):
        self.id=id

    def set_employee_id(self, employee_id):
        self.employee_id=employee_id

    def set_bank_id(self, bank_id):
        self.bank_id=bank_id

    def set_branch_id(self, branch_id):
        self.branch_id=branch_id

    def set_accountnumber(self, accountnumber):
        self.accountnumber=accountnumber


class HrmsEmployeeResponse:
    id = None
    first_name = None
    middle_name = None
    last_name = None
    full_name = None
    code = None
    department = None
    grade = None
    designation = None
    user_id = None
    email_id = None
    dob = None
    doj = None
    gender = None
    phone_no = None
    employee_type = None
    costcentre = None
    businesssegment = None
    noticeperiod = None
    role = None
    expected_doj = None
    org_id = None
    functional_head = None
    work_mode = None
    candidate_code = None
    employment_type = None
    pf_number = None
    esi_number = None
    uan_number = None
    pan_number = None
    aadhar_number = None

    def get(self):
        return json.dumps(self, default=lambda o: o.__dict__,
                          sort_keys=True, indent=4)

    def set_id(self, id):
        self.id = id
    def set_first_name(self, first_name):
        self.first_name = first_name
    def set_employee_name(self, employee_name):
        self.employee_name = employee_name

    def set_middle_name(self, middle_name):
        self.middle_name = middle_name

    def set_last_name(self, last_name):
        self.last_name = last_name

    def set_full_name(self, full_name):
        self.full_name = full_name

    def set_email_id(self, email_id):
        self.email_id = email_id
    def set_phone_no(self, phone_no):
        self.phone_no = phone_no
    def set_code(self, code):
        self.code = code

    def set_department(self, department):
        self.department = department
    def set_designation(self, designation):
        self.designation = designation
    def set_grade(self, grade):
        self.grade = grade
    def set_user(self, user):
        self.user = user
    def set_gender(self, gender):
        self.gender = gender
    def set_employee_type(self, employee_type):
        self.employee_type = employee_type
    def set_deployed_branch(self, deployed_branch):
        self.deployed_branch = deployed_branch

    def set_reporting_branch(self, reporting_branch):
        self.reporting_branch = reporting_branch

    def set_costcentre(self, costcentre):
        self.costcentre = costcentre
    def set_businesssegment(self, businesssegment):
        self.businesssegment = businesssegment

    def set_address(self, address):
        self.address = address
    def set_dob(self, dob):
        dob = date_to_m_sec(dob)
        self.dob = dob
    def set_doj(self, doj):
        doj = date_to_m_sec(doj)
        self.doj = (doj)

    def set_accountnumber(self, accountnumber):
        self.accountnumber = accountnumber

    def set_noticeperiod(self, noticeperiod_id):
        self.noticeperiod = None
        if noticeperiod_id!=None:
            noticedict=NoticePeriodUtil().notice_type(noticeperiod_id)
            self.noticeperiod = noticedict

    def set_role(self, role):
        if role is not None and role !='':
            self.role=DesignationType.role_dict.get(int(role))
        else:
            self.role = role

    def set_org_id(self, org_id):
        self.org_id = org_id

    def set_functional_head(self, functional_head):
        self.functional_head = functional_head

    def set_work_mode(self, work_mode):
        self.work_mode = work_mode
    def set_candidate_code(self, candidate_code):
        self.candidate_code = candidate_code

    def set_employment_type(self, employment_type):
        self.employment_type = employment_type

    def set_pf_number(self, pf_number):
        self.pf_number = pf_number

    def set_esi_number(self, esi_number):
        self.esi_number = esi_number

    def set_ispayroll(self,is_payroll):
        self.is_payroll = is_payroll

    def set_disabality(self,disabality):
        self.disabality = disabality

    def set_pan_number(self, pan_number):
        self.pan_number = pan_number

    def set_uan_number(self, uan_number):
        self.uan_number = uan_number

    def set_aadhar_number(self, aadhar_number):
        self.aadhar_number = aadhar_number

    def set_emp_functional_head(self, functional_head, arr):
        self.functional_head = None
        if arr != None:
            for i in arr:
                if i.id == functional_head:
                    self.functional_head = i
                    break
        else:
            self.functional_head = None


class EmployeeHrUpdateauditResponse:
    id = None
    ref_id = None
    ref_type = None
    data = None
    user_id = None
    date = None
    req_status = None
    rel_refid = None
    rel_reftype = None
    action = None

    def get(self):
      return json.dumps(self, default=lambda o: o.__dict__,
                         sort_keys=True, indent=4)

    def set_id(self, id):
        self.id = id
    def set_refid(self, ref_id):
        self.ref_id = ref_id
    def set_reftype(self, ref_type):
        self.ref_type = ref_type
    def set_data(self, data):
        self.data = data
    def set_userid(self, user_id):
        self.user_id = user_id
    def set_date(self, date):
        self.date = str(date)
    def set_reqstatus(self, req_status):
        self.req_status = req_status
    def set_relrefid(self, rel_refid):
        self.rel_refid = rel_refid
    def set_relreftype(self, rel_reftype):
        self.rel_reftype = rel_reftype
    def set_action(self, action):
        self.action = action
