# 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 .i18n import I18n


class Template(object):
    _types = {
        "template_id": str,
        "name": I18n,
        "stage_type": str,
        "review_stage_role": str,
        "review_stage_data_write_mode": str,
    }

    def __init__(self, d=None):
        self.template_id: Optional[str] = None
        self.name: Optional[I18n] = None
        self.stage_type: Optional[str] = None
        self.review_stage_role: Optional[str] = None
        self.review_stage_data_write_mode: Optional[str] = None
        init(self, d, self._types)

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


class TemplateBuilder(object):
    def __init__(self) -> None:
        self._template = Template()

    def template_id(self, template_id: str) -> "TemplateBuilder":
        self._template.template_id = template_id
        return self

    def name(self, name: I18n) -> "TemplateBuilder":
        self._template.name = name
        return self

    def stage_type(self, stage_type: str) -> "TemplateBuilder":
        self._template.stage_type = stage_type
        return self

    def review_stage_role(self, review_stage_role: str) -> "TemplateBuilder":
        self._template.review_stage_role = review_stage_role
        return self

    def review_stage_data_write_mode(self, review_stage_data_write_mode: str) -> "TemplateBuilder":
        self._template.review_stage_data_write_mode = review_stage_data_write_mode
        return self

    def build(self) -> "Template":
        return self._template
