# 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 .pair import Pair


class UatInstance(object):
    _types = {
        "instance_status": str,
        "definition_code": str,
        "initiator": int,
        "initiator_name": str,
        "instance_code": str,
        "definition_group_id": int,
        "definition_group_name": str,
        "definition_name": str,
        "summaries": List[Pair],
        "instance_external_id": str,
        "link": str,
    }

    def __init__(self, d=None):
        self.instance_status: Optional[str] = None
        self.definition_code: Optional[str] = None
        self.initiator: Optional[int] = None
        self.initiator_name: Optional[str] = None
        self.instance_code: Optional[str] = None
        self.definition_group_id: Optional[int] = None
        self.definition_group_name: Optional[str] = None
        self.definition_name: Optional[str] = None
        self.summaries: Optional[List[Pair]] = None
        self.instance_external_id: Optional[str] = None
        self.link: Optional[str] = None
        init(self, d, self._types)

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


class UatInstanceBuilder(object):
    def __init__(self) -> None:
        self._uat_instance = UatInstance()

    def instance_status(self, instance_status: str) -> "UatInstanceBuilder":
        self._uat_instance.instance_status = instance_status
        return self

    def definition_code(self, definition_code: str) -> "UatInstanceBuilder":
        self._uat_instance.definition_code = definition_code
        return self

    def initiator(self, initiator: int) -> "UatInstanceBuilder":
        self._uat_instance.initiator = initiator
        return self

    def initiator_name(self, initiator_name: str) -> "UatInstanceBuilder":
        self._uat_instance.initiator_name = initiator_name
        return self

    def instance_code(self, instance_code: str) -> "UatInstanceBuilder":
        self._uat_instance.instance_code = instance_code
        return self

    def definition_group_id(self, definition_group_id: int) -> "UatInstanceBuilder":
        self._uat_instance.definition_group_id = definition_group_id
        return self

    def definition_group_name(self, definition_group_name: str) -> "UatInstanceBuilder":
        self._uat_instance.definition_group_name = definition_group_name
        return self

    def definition_name(self, definition_name: str) -> "UatInstanceBuilder":
        self._uat_instance.definition_name = definition_name
        return self

    def summaries(self, summaries: List[Pair]) -> "UatInstanceBuilder":
        self._uat_instance.summaries = summaries
        return self

    def instance_external_id(self, instance_external_id: str) -> "UatInstanceBuilder":
        self._uat_instance.instance_external_id = instance_external_id
        return self

    def link(self, link: str) -> "UatInstanceBuilder":
        self._uat_instance.link = link
        return self

    def build(self) -> "UatInstance":
        return self._uat_instance
