# 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_recipient_log_item import MailRecipientLogItem
from .mail_recipient_log_i18n_text_param import MailRecipientLogI18nTextParam
from .mail_recipient_log_i18n_text_param import MailRecipientLogI18nTextParam


class MailRecipientLog(object):
    _types = {
        "subject": str,
        "direction": int,
        "sender": str,
        "recipient": str,
        "created_timestamp": str,
        "message_id": str,
        "message_size": str,
        "attachment_number": int,
        "last_status": str,
        "last_status_type": int,
        "is_recipient_group": bool,
        "group_total_member": int,
        "recipient_mail_log": MailRecipientLogItem,
        "sender_mail_location_text": str,
        "sender_mail_location_text_values": List[MailRecipientLogI18nTextParam],
        "recipient_mail_location_text": str,
        "recipient_mail_location_text_values": List[MailRecipientLogI18nTextParam],
        "sender_ip": str,
    }

    def __init__(self, d=None):
        self.subject: Optional[str] = None
        self.direction: Optional[int] = None
        self.sender: Optional[str] = None
        self.recipient: Optional[str] = None
        self.created_timestamp: Optional[str] = None
        self.message_id: Optional[str] = None
        self.message_size: Optional[str] = None
        self.attachment_number: Optional[int] = None
        self.last_status: Optional[str] = None
        self.last_status_type: Optional[int] = None
        self.is_recipient_group: Optional[bool] = None
        self.group_total_member: Optional[int] = None
        self.recipient_mail_log: Optional[MailRecipientLogItem] = None
        self.sender_mail_location_text: Optional[str] = None
        self.sender_mail_location_text_values: Optional[List[MailRecipientLogI18nTextParam]] = None
        self.recipient_mail_location_text: Optional[str] = None
        self.recipient_mail_location_text_values: Optional[List[MailRecipientLogI18nTextParam]] = None
        self.sender_ip: Optional[str] = None
        init(self, d, self._types)

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


class MailRecipientLogBuilder(object):
    def __init__(self) -> None:
        self._mail_recipient_log = MailRecipientLog()

    def subject(self, subject: str) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.subject = subject
        return self

    def direction(self, direction: int) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.direction = direction
        return self

    def sender(self, sender: str) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.sender = sender
        return self

    def recipient(self, recipient: str) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.recipient = recipient
        return self

    def created_timestamp(self, created_timestamp: str) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.created_timestamp = created_timestamp
        return self

    def message_id(self, message_id: str) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.message_id = message_id
        return self

    def message_size(self, message_size: str) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.message_size = message_size
        return self

    def attachment_number(self, attachment_number: int) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.attachment_number = attachment_number
        return self

    def last_status(self, last_status: str) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.last_status = last_status
        return self

    def last_status_type(self, last_status_type: int) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.last_status_type = last_status_type
        return self

    def is_recipient_group(self, is_recipient_group: bool) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.is_recipient_group = is_recipient_group
        return self

    def group_total_member(self, group_total_member: int) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.group_total_member = group_total_member
        return self

    def recipient_mail_log(self, recipient_mail_log: MailRecipientLogItem) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.recipient_mail_log = recipient_mail_log
        return self

    def sender_mail_location_text(self, sender_mail_location_text: str) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.sender_mail_location_text = sender_mail_location_text
        return self

    def sender_mail_location_text_values(self, sender_mail_location_text_values: List[
        MailRecipientLogI18nTextParam]) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.sender_mail_location_text_values = sender_mail_location_text_values
        return self

    def recipient_mail_location_text(self, recipient_mail_location_text: str) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.recipient_mail_location_text = recipient_mail_location_text
        return self

    def recipient_mail_location_text_values(self, recipient_mail_location_text_values: List[
        MailRecipientLogI18nTextParam]) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.recipient_mail_location_text_values = recipient_mail_location_text_values
        return self

    def sender_ip(self, sender_ip: str) -> "MailRecipientLogBuilder":
        self._mail_recipient_log.sender_ip = sender_ip
        return self

    def build(self) -> "MailRecipientLog":
        return self._mail_recipient_log
