# 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 .notification_user import NotificationUser
from .notification_user import NotificationUser
from .notification_department import NotificationDepartment
from .notification_user import NotificationUser
from .notification_department import NotificationDepartment
from .notification_chat import NotificationChat


class Notification(object):
    _types = {
        "id": str,
        "job_name": str,
        "status": int,
        "create_user": NotificationUser,
        "created_at": str,
        "update_user": NotificationUser,
        "updated_at": str,
        "target_user_count": int,
        "sent_user_count": int,
        "read_user_count": int,
        "send_at": str,
        "push_content": str,
        "push_type": int,
        "push_scope_type": int,
        "new_staff_scope_type": int,
        "new_staff_scope_department_list": List[NotificationDepartment],
        "user_list": List[NotificationUser],
        "department_list": List[NotificationDepartment],
        "chat_list": List[NotificationChat],
        "ext": str,
    }

    def __init__(self, d=None):
        self.id: Optional[str] = None
        self.job_name: Optional[str] = None
        self.status: Optional[int] = None
        self.create_user: Optional[NotificationUser] = None
        self.created_at: Optional[str] = None
        self.update_user: Optional[NotificationUser] = None
        self.updated_at: Optional[str] = None
        self.target_user_count: Optional[int] = None
        self.sent_user_count: Optional[int] = None
        self.read_user_count: Optional[int] = None
        self.send_at: Optional[str] = None
        self.push_content: Optional[str] = None
        self.push_type: Optional[int] = None
        self.push_scope_type: Optional[int] = None
        self.new_staff_scope_type: Optional[int] = None
        self.new_staff_scope_department_list: Optional[List[NotificationDepartment]] = None
        self.user_list: Optional[List[NotificationUser]] = None
        self.department_list: Optional[List[NotificationDepartment]] = None
        self.chat_list: Optional[List[NotificationChat]] = None
        self.ext: Optional[str] = None
        init(self, d, self._types)

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


class NotificationBuilder(object):
    def __init__(self) -> None:
        self._notification = Notification()

    def id(self, id: str) -> "NotificationBuilder":
        self._notification.id = id
        return self

    def job_name(self, job_name: str) -> "NotificationBuilder":
        self._notification.job_name = job_name
        return self

    def status(self, status: int) -> "NotificationBuilder":
        self._notification.status = status
        return self

    def create_user(self, create_user: NotificationUser) -> "NotificationBuilder":
        self._notification.create_user = create_user
        return self

    def created_at(self, created_at: str) -> "NotificationBuilder":
        self._notification.created_at = created_at
        return self

    def update_user(self, update_user: NotificationUser) -> "NotificationBuilder":
        self._notification.update_user = update_user
        return self

    def updated_at(self, updated_at: str) -> "NotificationBuilder":
        self._notification.updated_at = updated_at
        return self

    def target_user_count(self, target_user_count: int) -> "NotificationBuilder":
        self._notification.target_user_count = target_user_count
        return self

    def sent_user_count(self, sent_user_count: int) -> "NotificationBuilder":
        self._notification.sent_user_count = sent_user_count
        return self

    def read_user_count(self, read_user_count: int) -> "NotificationBuilder":
        self._notification.read_user_count = read_user_count
        return self

    def send_at(self, send_at: str) -> "NotificationBuilder":
        self._notification.send_at = send_at
        return self

    def push_content(self, push_content: str) -> "NotificationBuilder":
        self._notification.push_content = push_content
        return self

    def push_type(self, push_type: int) -> "NotificationBuilder":
        self._notification.push_type = push_type
        return self

    def push_scope_type(self, push_scope_type: int) -> "NotificationBuilder":
        self._notification.push_scope_type = push_scope_type
        return self

    def new_staff_scope_type(self, new_staff_scope_type: int) -> "NotificationBuilder":
        self._notification.new_staff_scope_type = new_staff_scope_type
        return self

    def new_staff_scope_department_list(self, new_staff_scope_department_list: List[
        NotificationDepartment]) -> "NotificationBuilder":
        self._notification.new_staff_scope_department_list = new_staff_scope_department_list
        return self

    def user_list(self, user_list: List[NotificationUser]) -> "NotificationBuilder":
        self._notification.user_list = user_list
        return self

    def department_list(self, department_list: List[NotificationDepartment]) -> "NotificationBuilder":
        self._notification.department_list = department_list
        return self

    def chat_list(self, chat_list: List[NotificationChat]) -> "NotificationBuilder":
        self._notification.chat_list = chat_list
        return self

    def ext(self, ext: str) -> "NotificationBuilder":
        self._notification.ext = ext
        return self

    def build(self) -> "Notification":
        return self._notification
