# 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 .user import User


class TrainProgramRegistration(object):
    _types = {
        "train_program_id": str,
        "learner": User,
        "enroll_at": int,
        "enroll_type": int,
        "online_seconds": int,
        "learning_state": int,
        "finished_at": int,
        "compulsory_task_id_list": List[str],
        "finished_compulsory_task_id_list": List[str],
        "optional_task_id_list": List[str],
        "finished_optional_task_id_list": List[str],
    }

    def __init__(self, d=None):
        self.train_program_id: Optional[str] = None
        self.learner: Optional[User] = None
        self.enroll_at: Optional[int] = None
        self.enroll_type: Optional[int] = None
        self.online_seconds: Optional[int] = None
        self.learning_state: Optional[int] = None
        self.finished_at: Optional[int] = None
        self.compulsory_task_id_list: Optional[List[str]] = None
        self.finished_compulsory_task_id_list: Optional[List[str]] = None
        self.optional_task_id_list: Optional[List[str]] = None
        self.finished_optional_task_id_list: Optional[List[str]] = None
        init(self, d, self._types)

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


class TrainProgramRegistrationBuilder(object):
    def __init__(self) -> None:
        self._train_program_registration = TrainProgramRegistration()

    def train_program_id(self, train_program_id: str) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.train_program_id = train_program_id
        return self

    def learner(self, learner: User) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.learner = learner
        return self

    def enroll_at(self, enroll_at: int) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.enroll_at = enroll_at
        return self

    def enroll_type(self, enroll_type: int) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.enroll_type = enroll_type
        return self

    def online_seconds(self, online_seconds: int) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.online_seconds = online_seconds
        return self

    def learning_state(self, learning_state: int) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.learning_state = learning_state
        return self

    def finished_at(self, finished_at: int) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.finished_at = finished_at
        return self

    def compulsory_task_id_list(self, compulsory_task_id_list: List[str]) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.compulsory_task_id_list = compulsory_task_id_list
        return self

    def finished_compulsory_task_id_list(self, finished_compulsory_task_id_list: List[
        str]) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.finished_compulsory_task_id_list = finished_compulsory_task_id_list
        return self

    def optional_task_id_list(self, optional_task_id_list: List[str]) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.optional_task_id_list = optional_task_id_list
        return self

    def finished_optional_task_id_list(self,
                                       finished_optional_task_id_list: List[str]) -> "TrainProgramRegistrationBuilder":
        self._train_program_registration.finished_optional_task_id_list = finished_optional_task_id_list
        return self

    def build(self) -> "TrainProgramRegistration":
        return self._train_program_registration
