# 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 ApprovalSetting(object):
    _types = {
        "revert_interval": int,
        "revert_option": int,
        "reject_option": int,
        "quick_approval_option": int,
        "overtime_disable": bool,
        "overtime_notice_time": int,
        "overtime_close_time": int,
        "overtime_recover_time": int,
    }

    def __init__(self, d=None):
        self.revert_interval: Optional[int] = None
        self.revert_option: Optional[int] = None
        self.reject_option: Optional[int] = None
        self.quick_approval_option: Optional[int] = None
        self.overtime_disable: Optional[bool] = None
        self.overtime_notice_time: Optional[int] = None
        self.overtime_close_time: Optional[int] = None
        self.overtime_recover_time: Optional[int] = None
        init(self, d, self._types)

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


class ApprovalSettingBuilder(object):
    def __init__(self) -> None:
        self._approval_setting = ApprovalSetting()

    def revert_interval(self, revert_interval: int) -> "ApprovalSettingBuilder":
        self._approval_setting.revert_interval = revert_interval
        return self

    def revert_option(self, revert_option: int) -> "ApprovalSettingBuilder":
        self._approval_setting.revert_option = revert_option
        return self

    def reject_option(self, reject_option: int) -> "ApprovalSettingBuilder":
        self._approval_setting.reject_option = reject_option
        return self

    def quick_approval_option(self, quick_approval_option: int) -> "ApprovalSettingBuilder":
        self._approval_setting.quick_approval_option = quick_approval_option
        return self

    def overtime_disable(self, overtime_disable: bool) -> "ApprovalSettingBuilder":
        self._approval_setting.overtime_disable = overtime_disable
        return self

    def overtime_notice_time(self, overtime_notice_time: int) -> "ApprovalSettingBuilder":
        self._approval_setting.overtime_notice_time = overtime_notice_time
        return self

    def overtime_close_time(self, overtime_close_time: int) -> "ApprovalSettingBuilder":
        self._approval_setting.overtime_close_time = overtime_close_time
        return self

    def overtime_recover_time(self, overtime_recover_time: int) -> "ApprovalSettingBuilder":
        self._approval_setting.overtime_recover_time = overtime_recover_time
        return self

    def build(self) -> "ApprovalSetting":
        return self._approval_setting
