# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init


class TenantTraceInfo(object):
    _types = {
        "create_source": str,
        "salesforce_id": str,
        "web_id": str,
        "source_system": str,
        "source_page": str,
        "client_ip": str,
        "channel": str,
        "plan_id": str,
        "subscribe_email": bool,
        "tracking_code": str,
        "inviter_id": str,
        "invitation_token": str,
        "captcha_info": str,
        "reg_params": str,
        "terminal_type": str,
    }

    def __init__(self, d=None):
        self.create_source: Optional[str] = None
        self.salesforce_id: Optional[str] = None
        self.web_id: Optional[str] = None
        self.source_system: Optional[str] = None
        self.source_page: Optional[str] = None
        self.client_ip: Optional[str] = None
        self.channel: Optional[str] = None
        self.plan_id: Optional[str] = None
        self.subscribe_email: Optional[bool] = None
        self.tracking_code: Optional[str] = None
        self.inviter_id: Optional[str] = None
        self.invitation_token: Optional[str] = None
        self.captcha_info: Optional[str] = None
        self.reg_params: Optional[str] = None
        self.terminal_type: Optional[str] = None
        init(self, d, self._types)

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


class TenantTraceInfoBuilder(object):
    def __init__(self) -> None:
        self._tenant_trace_info = TenantTraceInfo()

    def create_source(self, create_source: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.create_source = create_source
        return self

    def salesforce_id(self, salesforce_id: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.salesforce_id = salesforce_id
        return self

    def web_id(self, web_id: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.web_id = web_id
        return self

    def source_system(self, source_system: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.source_system = source_system
        return self

    def source_page(self, source_page: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.source_page = source_page
        return self

    def client_ip(self, client_ip: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.client_ip = client_ip
        return self

    def channel(self, channel: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.channel = channel
        return self

    def plan_id(self, plan_id: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.plan_id = plan_id
        return self

    def subscribe_email(self, subscribe_email: bool) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.subscribe_email = subscribe_email
        return self

    def tracking_code(self, tracking_code: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.tracking_code = tracking_code
        return self

    def inviter_id(self, inviter_id: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.inviter_id = inviter_id
        return self

    def invitation_token(self, invitation_token: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.invitation_token = invitation_token
        return self

    def captcha_info(self, captcha_info: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.captcha_info = captcha_info
        return self

    def reg_params(self, reg_params: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.reg_params = reg_params
        return self

    def terminal_type(self, terminal_type: str) -> "TenantTraceInfoBuilder":
        self._tenant_trace_info.terminal_type = terminal_type
        return self

    def build(self) -> "TenantTraceInfo":
        return self._tenant_trace_info
