# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init


class NormalLeaveBalance(object):
    _types = {
        "balance_id": str,
        "user_id": str,
        "leave_type_id": str,
        "quota": str,
        "grant_quota": str,
        "used_quota": str,
        "unit": str,
        "sub_type": str,
        "expire_time": int,
        "effective_time": int,
        "grant_source": str,
        "status": str,
        "desc": str,
        "plan_target_quota": str,
        "plan_end_time": int,
        "grant_daily": bool,
    }

    def __init__(self, d=None):
        self.balance_id: Optional[str] = None
        self.user_id: Optional[str] = None
        self.leave_type_id: Optional[str] = None
        self.quota: Optional[str] = None
        self.grant_quota: Optional[str] = None
        self.used_quota: Optional[str] = None
        self.unit: Optional[str] = None
        self.sub_type: Optional[str] = None
        self.expire_time: Optional[int] = None
        self.effective_time: Optional[int] = None
        self.grant_source: Optional[str] = None
        self.status: Optional[str] = None
        self.desc: Optional[str] = None
        self.plan_target_quota: Optional[str] = None
        self.plan_end_time: Optional[int] = None
        self.grant_daily: Optional[bool] = None
        init(self, d, self._types)

    @staticmethod
    def builder() -> "NormalLeaveBalanceBuilder":
        return NormalLeaveBalanceBuilder()


class NormalLeaveBalanceBuilder(object):
    def __init__(self) -> None:
        self._normal_leave_balance = NormalLeaveBalance()

    def balance_id(self, balance_id: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.balance_id = balance_id
        return self

    def user_id(self, user_id: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.user_id = user_id
        return self

    def leave_type_id(self, leave_type_id: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.leave_type_id = leave_type_id
        return self

    def quota(self, quota: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.quota = quota
        return self

    def grant_quota(self, grant_quota: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.grant_quota = grant_quota
        return self

    def used_quota(self, used_quota: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.used_quota = used_quota
        return self

    def unit(self, unit: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.unit = unit
        return self

    def sub_type(self, sub_type: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.sub_type = sub_type
        return self

    def expire_time(self, expire_time: int) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.expire_time = expire_time
        return self

    def effective_time(self, effective_time: int) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.effective_time = effective_time
        return self

    def grant_source(self, grant_source: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.grant_source = grant_source
        return self

    def status(self, status: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.status = status
        return self

    def desc(self, desc: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.desc = desc
        return self

    def plan_target_quota(self, plan_target_quota: str) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.plan_target_quota = plan_target_quota
        return self

    def plan_end_time(self, plan_end_time: int) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.plan_end_time = plan_end_time
        return self

    def grant_daily(self, grant_daily: bool) -> "NormalLeaveBalanceBuilder":
        self._normal_leave_balance.grant_daily = grant_daily
        return self

    def build(self) -> "NormalLeaveBalance":
        return self._normal_leave_balance
