# 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 .event_user import EventUser


class EventCourseRegistration(object):
    _types = {
        "course_id": str,
        "learner": EventUser,
        "enroll_at": int,
        "enroll_type": int,
        "learning_duration": int,
        "finished_at": int,
        "learning_state": int,
        "compulsory_lesson_ids": List[str],
        "learned_compulsory_lesson_ids": List[str],
        "optional_lesson_ids": List[str],
        "learned_optional_lesson_ids": List[str],
    }

    def __init__(self, d=None):
        self.course_id: Optional[str] = None
        self.learner: Optional[EventUser] = None
        self.enroll_at: Optional[int] = None
        self.enroll_type: Optional[int] = None
        self.learning_duration: Optional[int] = None
        self.finished_at: Optional[int] = None
        self.learning_state: Optional[int] = None
        self.compulsory_lesson_ids: Optional[List[str]] = None
        self.learned_compulsory_lesson_ids: Optional[List[str]] = None
        self.optional_lesson_ids: Optional[List[str]] = None
        self.learned_optional_lesson_ids: Optional[List[str]] = None
        init(self, d, self._types)

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


class EventCourseRegistrationBuilder(object):
    def __init__(self) -> None:
        self._event_course_registration = EventCourseRegistration()

    def course_id(self, course_id: str) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.course_id = course_id
        return self

    def learner(self, learner: EventUser) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.learner = learner
        return self

    def enroll_at(self, enroll_at: int) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.enroll_at = enroll_at
        return self

    def enroll_type(self, enroll_type: int) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.enroll_type = enroll_type
        return self

    def learning_duration(self, learning_duration: int) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.learning_duration = learning_duration
        return self

    def finished_at(self, finished_at: int) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.finished_at = finished_at
        return self

    def learning_state(self, learning_state: int) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.learning_state = learning_state
        return self

    def compulsory_lesson_ids(self, compulsory_lesson_ids: List[str]) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.compulsory_lesson_ids = compulsory_lesson_ids
        return self

    def learned_compulsory_lesson_ids(self,
                                      learned_compulsory_lesson_ids: List[str]) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.learned_compulsory_lesson_ids = learned_compulsory_lesson_ids
        return self

    def optional_lesson_ids(self, optional_lesson_ids: List[str]) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.optional_lesson_ids = optional_lesson_ids
        return self

    def learned_optional_lesson_ids(self, learned_optional_lesson_ids: List[str]) -> "EventCourseRegistrationBuilder":
        self._event_course_registration.learned_optional_lesson_ids = learned_optional_lesson_ids
        return self

    def build(self) -> "EventCourseRegistration":
        return self._event_course_registration
