from decimal import Decimal


def calculate_payroll(payload: dict) -> dict:
    gross = Decimal(str(payload.get("gross_pay") or 0))
    bonus = Decimal(str(payload.get("bonus_amount") or 0))
    allowance = Decimal(str(payload.get("allowance_amount") or 0))
    deduction = Decimal(str(payload.get("deduction_amount") or 0))
    paye = Decimal(str(payload.get("paye_amount") or 0))
    ks_employee = Decimal(str(payload.get("kiwisaver_employee") or 0))
    ks_employer = Decimal(str(payload.get("kiwisaver_employer") or 0))
    acc = Decimal(str(payload.get("acc_amount") or 0))
    other_tax = Decimal(str(payload.get("other_tax_amount") or 0))

    gross_total = gross + bonus + allowance
    net_pay = gross_total - deduction - paye - ks_employee - acc - other_tax
    employer_cost = gross_total + ks_employer

    return {
        "gross_total": gross_total,
        "net_pay": net_pay,
        "employer_cost": employer_cost,
    }
