# 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 .open_method import OpenMethod


class Application(object):
    _types = {
        "app_id": str,
        "app_name": str,
        "description": str,
        "app_type": str,
        "avatar_url": str,
        "open_methods": List[OpenMethod],
    }

    def __init__(self, d=None):
        self.app_id: Optional[str] = None
        self.app_name: Optional[str] = None
        self.description: Optional[str] = None
        self.app_type: Optional[str] = None
        self.avatar_url: Optional[str] = None
        self.open_methods: Optional[List[OpenMethod]] = None
        init(self, d, self._types)

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


class ApplicationBuilder(object):
    def __init__(self) -> None:
        self._application = Application()

    def app_id(self, app_id: str) -> "ApplicationBuilder":
        self._application.app_id = app_id
        return self

    def app_name(self, app_name: str) -> "ApplicationBuilder":
        self._application.app_name = app_name
        return self

    def description(self, description: str) -> "ApplicationBuilder":
        self._application.description = description
        return self

    def app_type(self, app_type: str) -> "ApplicationBuilder":
        self._application.app_type = app_type
        return self

    def avatar_url(self, avatar_url: str) -> "ApplicationBuilder":
        self._application.avatar_url = avatar_url
        return self

    def open_methods(self, open_methods: List[OpenMethod]) -> "ApplicationBuilder":
        self._application.open_methods = open_methods
        return self

    def build(self) -> "Application":
        return self._application
