import json


from payrollservice.util.payrollutil import payrolldeduction_val, category_val


class PayrollComponentResponse:
    id,code,name,allowance_type,pf_include,is_deduction,percentage, grade, cat_id, subcat_id, glno = (None,)*11
    def get(self):
        return json.dumps(self, default=lambda o: o.__dict__,
                          sort_keys=True, indent=4)

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

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

    def set_name(self, name):
        self.name = name

    def set_allowance_type(self, allowance_type):
        self.allowance_type = allowance_type

    def set_pf_include(self, pf_include):
        self.pf_include = pf_include

    def set_is_deduction(self, is_deduction):
        self.is_deduction = is_deduction
    def set_percentage(self, percentage):
        self.percentage = str(percentage)

    def set_type(self, type):
        self.type = payrolldeduction_val(type)

    def set_from_date(self, from_date):
        self.from_date = str(from_date)

    def set_to_date(self, to_date):
        self.to_date = str(to_date)

    def set_payrolldeduct_val(self,payrollcomp_id, arr):
        self.payrolldeduction_data = None
        new_arr = []
        for i in arr:
         if i.payrollcomp_id == payrollcomp_id:
             self.payrolldeduction_data = i
             new_arr.append(i)
             break
         else:
             pass
        self.payrolldeduction_data = new_arr

    def set_grade_val(self, grade, grade_data):
        self.grade = None
        if grade_data:
            for i in grade_data:
                if i['id'] == grade:
                    self.grade = i
                    break

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

    def set_cat_id(self, cat_id):
        self.cat_id = cat_id

    def set_subcat_id(self, subcat_id):
        self.subcat_id = subcat_id

    def set_glno(self, glno):
        self.glno = glno

    def set_allowance_type_val(self,allowance_type, arr):
        self.allowance_type = None
        for i in arr:
         if i.id == allowance_type:
             self.allowance_type = i
             break


class CompanyContributionResponse:
    flag_id = None
    name = None
    percentage = None
    effective_from = None
    effective_to = None
    status = None
    amount = None
    cat_id = None
    subcat_id = None
    glno = None
    sal_amount = None
    max_amount = None

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

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

    def set_name(self, name):
        self.name = name

    def set_percentage(self, percentage):
        self.percentage = str(percentage)+'%'

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

    def set_effective_to(self, effective_to):
        self.effective_to = str(effective_to)

    def set_amount(self, amount):
        self.amount = str(amount)

    def set_yearly_amount(self, amount):
        self.yearly_amount = str(amount * 12)

    def set_cat_id(self, cat_id):
        self.cat_id = cat_id

    def set_subcat_id(self, subcat_id):
        self.subcat_id = subcat_id

    def set_glno(self, glno):
        self.glno = glno


    def set_total(self, amount):
        self.total = str(amount)

    def set_yearly_total(self, amount):
        self.yearly_total = str(amount * 12)

    def set_sal_amount(self, sal_amount):
        self.sal_amount = str(sal_amount)

    def set_percentage1(self, percentage):
        self.percentage = str(percentage)

    def set_max_amount(self, amount):
        self.max_amount =str(amount)



class EmployeePFResponse:
    id = None
    name = None
    code = None
    percentage = None
    amount = None
    is_standard = None
    ref_id = None
    cat_id = None
    subcat_id = None
    glno = None
    sal_amount = None
    max_amount = None

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

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

    def set_name(self, name):
        self.name = name

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

    def set_percentage(self, percentage):
        self.percentage = str(percentage)

    def set_amount(self, amount):
        self.amount = str(amount)

    def set_is_standard(self, is_standard):
        self.is_standard = is_standard

    def set_ref_id_val(self, ref_id, arr):
        self.ref_id = None
        for i in arr:
            if i.map_id == ref_id:
                self.ref_id = i
                break
            else:
                pass

    def set_ref_id(self, ref_id):
        self.ref_id = ref_id

    def set_cat_id(self, cat_id):
        self.cat_id = cat_id

    def set_subcat_id(self, subcat_id):
        self.subcat_id = subcat_id

    def set_glno(self, glno):
        self.glno = glno

    def set_sal_amount(self, sal_amount):
        self.sal_amount = str(sal_amount)

    def set_max_amount(self,amount):
        self.max_amount = str(amount)


class PayrollDeductionResponse:
    id = None
    payrollcomp_id = None
    type = None
    from_date = None
    to_date = None

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

    def set_payrollcomp_id(self, payrollcomp_id):
        self.payrollcomp_id = payrollcomp_id

    def set_type(self, type):
        self.type = payrolldeduction_val(type)

    def set_from_date(self, from_date):
        self.from_date = str(from_date)

    def set_to_date(self, to_date):
        self.to_date = str(to_date)

class ComponentTypeResponse:
    id=None
    name=None
    percentage=None
    category = 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_name(self, name):
        self.name = name

    def set_percentage(self, percentage):
        self.percentage = str(percentage)

    def set_category(self,category):
        self.category = category_val(category)

class PaycomponentFlagmasterResponse:
    flag_id=None
    map_id=None
    ref_type=None
    ref_id=None


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

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

    def set_map_id(self,map_id):
        self.map_id = map_id

    # def set_ref_type(self, ref_type):
    #     self.ref_type = flagreftype_val(ref_type)

    def set_ref_id(self, ref_id):
        self.ref_id = ref_id

    def set_ref_id_val(self, ref_id, arr):
        self.id = None
        self.name = None
        for i in arr:
            if i.id == ref_id:
                self.id = i.id
                self.name = i.name
                break
            else:
                pass

    def set_map_id_val(self, map_id, arr):
        self.paycomponent_data = None
        for i in arr:
            if i.id == map_id:
                self.paycomponent_data = i
                break

    def set_ref_id_data(self, ref_id, arr):
        self.id = None
        self.name = None
        for i in arr:
            if i.id == ref_id:
                self.id = i.id
                self.name = i.name
                self.type = i.type
                break
            else:
                pass

    def set_ref_id_datas(self, ref_id, arr):
        self.segment_data = None
        for i in arr:
            if i.id == ref_id:
                self.segment_data = i
                break

class SegmentMasterResponse:
    id=None
    name=None
    component_type=None
    type=None
    percentage=None
    segment_component_type=None
    segment_type=None
    glno=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_name(self, name):
        self.name = name

    def set_component_type_val(self, com_id,arr):
        self.component_type = None
        for i in arr:
            if i.id == com_id:
                self.component_type = i
                break
            else:
                pass

    def set_component_type(self,component_type):
        self.component_type = component_type

    def set_type(self, type):
        self.type = payrolldeduction_val(type)

    def set_percentage(self, percentage):
        self.percentage = str(percentage)

    def set_component_type_data(self, com_id,arr):
        self.segment_component_type = None
        for i in arr:
            if i.id == com_id:
                self.segment_component_type = i
                break
            else:
                pass

    def set_type_val(self, type):
        self.segment_type = payrolldeduction_val(type)

    def set_glno(self,glno):
        self.glno = glno
