# 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 .due import Due
from .origin import Origin
from .member import Member
from .custom_complete import CustomComplete
from .task_in_tasklist_info import TaskInTasklistInfo
from .start import Start
from .reminder import Reminder
from .input_custom_field_value import InputCustomFieldValue
from .docx_source import DocxSource
from .reminder import Reminder


class InputTask(object):
    _types = {
        "summary": str,
        "description": str,
        "due": Due,
        "origin": Origin,
        "extra": str,
        "completed_at": int,
        "members": List[Member],
        "repeat_rule": str,
        "custom_complete": CustomComplete,
        "tasklists": List[TaskInTasklistInfo],
        "client_token": str,
        "start": Start,
        "reminders": List[Reminder],
        "mode": int,
        "is_milestone": bool,
        "custom_fields": List[InputCustomFieldValue],
        "docx_source": DocxSource,
        "positive_reminders": List[Reminder],
    }

    def __init__(self, d=None):
        self.summary: Optional[str] = None
        self.description: Optional[str] = None
        self.due: Optional[Due] = None
        self.origin: Optional[Origin] = None
        self.extra: Optional[str] = None
        self.completed_at: Optional[int] = None
        self.members: Optional[List[Member]] = None
        self.repeat_rule: Optional[str] = None
        self.custom_complete: Optional[CustomComplete] = None
        self.tasklists: Optional[List[TaskInTasklistInfo]] = None
        self.client_token: Optional[str] = None
        self.start: Optional[Start] = None
        self.reminders: Optional[List[Reminder]] = None
        self.mode: Optional[int] = None
        self.is_milestone: Optional[bool] = None
        self.custom_fields: Optional[List[InputCustomFieldValue]] = None
        self.docx_source: Optional[DocxSource] = None
        self.positive_reminders: Optional[List[Reminder]] = None
        init(self, d, self._types)

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


class InputTaskBuilder(object):
    def __init__(self) -> None:
        self._input_task = InputTask()

    def summary(self, summary: str) -> "InputTaskBuilder":
        self._input_task.summary = summary
        return self

    def description(self, description: str) -> "InputTaskBuilder":
        self._input_task.description = description
        return self

    def due(self, due: Due) -> "InputTaskBuilder":
        self._input_task.due = due
        return self

    def origin(self, origin: Origin) -> "InputTaskBuilder":
        self._input_task.origin = origin
        return self

    def extra(self, extra: str) -> "InputTaskBuilder":
        self._input_task.extra = extra
        return self

    def completed_at(self, completed_at: int) -> "InputTaskBuilder":
        self._input_task.completed_at = completed_at
        return self

    def members(self, members: List[Member]) -> "InputTaskBuilder":
        self._input_task.members = members
        return self

    def repeat_rule(self, repeat_rule: str) -> "InputTaskBuilder":
        self._input_task.repeat_rule = repeat_rule
        return self

    def custom_complete(self, custom_complete: CustomComplete) -> "InputTaskBuilder":
        self._input_task.custom_complete = custom_complete
        return self

    def tasklists(self, tasklists: List[TaskInTasklistInfo]) -> "InputTaskBuilder":
        self._input_task.tasklists = tasklists
        return self

    def client_token(self, client_token: str) -> "InputTaskBuilder":
        self._input_task.client_token = client_token
        return self

    def start(self, start: Start) -> "InputTaskBuilder":
        self._input_task.start = start
        return self

    def reminders(self, reminders: List[Reminder]) -> "InputTaskBuilder":
        self._input_task.reminders = reminders
        return self

    def mode(self, mode: int) -> "InputTaskBuilder":
        self._input_task.mode = mode
        return self

    def is_milestone(self, is_milestone: bool) -> "InputTaskBuilder":
        self._input_task.is_milestone = is_milestone
        return self

    def custom_fields(self, custom_fields: List[InputCustomFieldValue]) -> "InputTaskBuilder":
        self._input_task.custom_fields = custom_fields
        return self

    def docx_source(self, docx_source: DocxSource) -> "InputTaskBuilder":
        self._input_task.docx_source = docx_source
        return self

    def positive_reminders(self, positive_reminders: List[Reminder]) -> "InputTaskBuilder":
        self._input_task.positive_reminders = positive_reminders
        return self

    def build(self) -> "InputTask":
        return self._input_task
