# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init
from .approval_create_viewers import ApprovalCreateViewers
from .approval_form import ApprovalForm
from .approval_node import ApprovalNode
from .approval_setting import ApprovalSetting
from .approval_config import ApprovalConfig
from .i18n_resource import I18nResource


class ApprovalCreate(object):
    _types = {
        "approval_name": str,
        "approval_code": str,
        "description": str,
        "viewers": List[ApprovalCreateViewers],
        "form": ApprovalForm,
        "node_list": List[ApprovalNode],
        "settings": ApprovalSetting,
        "config": ApprovalConfig,
        "icon": int,
        "i18n_resources": List[I18nResource],
        "process_manager_ids": List[str],
    }

    def __init__(self, d=None):
        self.approval_name: Optional[str] = None
        self.approval_code: Optional[str] = None
        self.description: Optional[str] = None
        self.viewers: Optional[List[ApprovalCreateViewers]] = None
        self.form: Optional[ApprovalForm] = None
        self.node_list: Optional[List[ApprovalNode]] = None
        self.settings: Optional[ApprovalSetting] = None
        self.config: Optional[ApprovalConfig] = None
        self.icon: Optional[int] = None
        self.i18n_resources: Optional[List[I18nResource]] = None
        self.process_manager_ids: Optional[List[str]] = None
        init(self, d, self._types)

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


class ApprovalCreateBuilder(object):
    def __init__(self) -> None:
        self._approval_create = ApprovalCreate()

    def approval_name(self, approval_name: str) -> "ApprovalCreateBuilder":
        self._approval_create.approval_name = approval_name
        return self

    def approval_code(self, approval_code: str) -> "ApprovalCreateBuilder":
        self._approval_create.approval_code = approval_code
        return self

    def description(self, description: str) -> "ApprovalCreateBuilder":
        self._approval_create.description = description
        return self

    def viewers(self, viewers: List[ApprovalCreateViewers]) -> "ApprovalCreateBuilder":
        self._approval_create.viewers = viewers
        return self

    def form(self, form: ApprovalForm) -> "ApprovalCreateBuilder":
        self._approval_create.form = form
        return self

    def node_list(self, node_list: List[ApprovalNode]) -> "ApprovalCreateBuilder":
        self._approval_create.node_list = node_list
        return self

    def settings(self, settings: ApprovalSetting) -> "ApprovalCreateBuilder":
        self._approval_create.settings = settings
        return self

    def config(self, config: ApprovalConfig) -> "ApprovalCreateBuilder":
        self._approval_create.config = config
        return self

    def icon(self, icon: int) -> "ApprovalCreateBuilder":
        self._approval_create.icon = icon
        return self

    def i18n_resources(self, i18n_resources: List[I18nResource]) -> "ApprovalCreateBuilder":
        self._approval_create.i18n_resources = i18n_resources
        return self

    def process_manager_ids(self, process_manager_ids: List[str]) -> "ApprovalCreateBuilder":
        self._approval_create.process_manager_ids = process_manager_ids
        return self

    def build(self) -> "ApprovalCreate":
        return self._approval_create
