# 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 .mail_address import MailAddress
from .mail_address import MailAddress
from .mail_address import MailAddress
from .template_attachment import TemplateAttachment


class Template(object):
    _types = {
        "template_id": str,
        "name": str,
        "subject": str,
        "template_content": str,
        "is_plain_text_mode": bool,
        "tos": List[MailAddress],
        "ccs": List[MailAddress],
        "bccs": List[MailAddress],
        "attachments": List[TemplateAttachment],
        "create_time": str,
    }

    def __init__(self, d=None):
        self.template_id: Optional[str] = None
        self.name: Optional[str] = None
        self.subject: Optional[str] = None
        self.template_content: Optional[str] = None
        self.is_plain_text_mode: Optional[bool] = None
        self.tos: Optional[List[MailAddress]] = None
        self.ccs: Optional[List[MailAddress]] = None
        self.bccs: Optional[List[MailAddress]] = None
        self.attachments: Optional[List[TemplateAttachment]] = None
        self.create_time: 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: str) -> "TemplateBuilder":
        self._template.name = name
        return self

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

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

    def is_plain_text_mode(self, is_plain_text_mode: bool) -> "TemplateBuilder":
        self._template.is_plain_text_mode = is_plain_text_mode
        return self

    def tos(self, tos: List[MailAddress]) -> "TemplateBuilder":
        self._template.tos = tos
        return self

    def ccs(self, ccs: List[MailAddress]) -> "TemplateBuilder":
        self._template.ccs = ccs
        return self

    def bccs(self, bccs: List[MailAddress]) -> "TemplateBuilder":
        self._template.bccs = bccs
        return self

    def attachments(self, attachments: List[TemplateAttachment]) -> "TemplateBuilder":
        self._template.attachments = attachments
        return self

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

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