# 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 MailRecipientLogDetail(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() -> "MailRecipientLogDetailBuilder":
        return MailRecipientLogDetailBuilder()


class MailRecipientLogDetailBuilder(object):
    def __init__(self) -> None:
        self._mail_recipient_log_detail = MailRecipientLogDetail()

    def subject(self, subject: str) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.subject = subject
        return self

    def direction(self, direction: int) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.direction = direction
        return self

    def sender(self, sender: str) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.sender = sender
        return self

    def recipient(self, recipient: str) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.recipient = recipient
        return self

    def created_timestamp(self, created_timestamp: str) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.created_timestamp = created_timestamp
        return self

    def message_id(self, message_id: str) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.message_id = message_id
        return self

    def message_size(self, message_size: str) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.message_size = message_size
        return self

    def attachment_number(self, attachment_number: int) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.attachment_number = attachment_number
        return self

    def last_status(self, last_status: str) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.last_status = last_status
        return self

    def last_status_type(self, last_status_type: int) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.last_status_type = last_status_type
        return self

    def is_recipient_group(self, is_recipient_group: bool) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.is_recipient_group = is_recipient_group
        return self

    def group_total_member(self, group_total_member: int) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.group_total_member = group_total_member
        return self

    def recipient_mail_log(self, recipient_mail_log: MailRecipientLogItem) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.recipient_mail_log = recipient_mail_log
        return self

    def sender_mail_location_text(self, sender_mail_location_text: str) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.sender_mail_location_text = sender_mail_location_text
        return self

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

    def recipient_mail_location_text(self, recipient_mail_location_text: str) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.recipient_mail_location_text = recipient_mail_location_text
        return self

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

    def sender_ip(self, sender_ip: str) -> "MailRecipientLogDetailBuilder":
        self._mail_recipient_log_detail.sender_ip = sender_ip
        return self

    def build(self) -> "MailRecipientLogDetail":
        return self._mail_recipient_log_detail
