# 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_external import ApprovalCreateExternal
from .approval_create_viewers import ApprovalCreateViewers
from .i18n_resource import I18nResource


class ExternalApproval(object):
    _types = {
        "approval_name": str,
        "approval_code": str,
        "group_code": str,
        "group_name": str,
        "description": str,
        "external": ApprovalCreateExternal,
        "viewers": List[ApprovalCreateViewers],
        "i18n_resources": List[I18nResource],
        "managers": List[str],
    }

    def __init__(self, d=None):
        self.approval_name: Optional[str] = None
        self.approval_code: Optional[str] = None
        self.group_code: Optional[str] = None
        self.group_name: Optional[str] = None
        self.description: Optional[str] = None
        self.external: Optional[ApprovalCreateExternal] = None
        self.viewers: Optional[List[ApprovalCreateViewers]] = None
        self.i18n_resources: Optional[List[I18nResource]] = None
        self.managers: Optional[List[str]] = None
        init(self, d, self._types)

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


class ExternalApprovalBuilder(object):
    def __init__(self) -> None:
        self._external_approval = ExternalApproval()

    def approval_name(self, approval_name: str) -> "ExternalApprovalBuilder":
        self._external_approval.approval_name = approval_name
        return self

    def approval_code(self, approval_code: str) -> "ExternalApprovalBuilder":
        self._external_approval.approval_code = approval_code
        return self

    def group_code(self, group_code: str) -> "ExternalApprovalBuilder":
        self._external_approval.group_code = group_code
        return self

    def group_name(self, group_name: str) -> "ExternalApprovalBuilder":
        self._external_approval.group_name = group_name
        return self

    def description(self, description: str) -> "ExternalApprovalBuilder":
        self._external_approval.description = description
        return self

    def external(self, external: ApprovalCreateExternal) -> "ExternalApprovalBuilder":
        self._external_approval.external = external
        return self

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

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

    def managers(self, managers: List[str]) -> "ExternalApprovalBuilder":
        self._external_approval.managers = managers
        return self

    def build(self) -> "ExternalApproval":
        return self._external_approval
