# 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 .semester import Semester
from .activity import Activity
from .indicator import Indicator
from .template import Template
from .unit import Unit
from .field import Field
from .review_profile import ReviewProfile


class ReviewData(object):
    _types = {
        "semesters": List[Semester],
        "activities": List[Activity],
        "indicators": List[Indicator],
        "templates": List[Template],
        "units": List[Unit],
        "fields": List[Field],
        "datas": List[ReviewProfile],
    }

    def __init__(self, d=None):
        self.semesters: Optional[List[Semester]] = None
        self.activities: Optional[List[Activity]] = None
        self.indicators: Optional[List[Indicator]] = None
        self.templates: Optional[List[Template]] = None
        self.units: Optional[List[Unit]] = None
        self.fields: Optional[List[Field]] = None
        self.datas: Optional[List[ReviewProfile]] = None
        init(self, d, self._types)

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


class ReviewDataBuilder(object):
    def __init__(self) -> None:
        self._review_data = ReviewData()

    def semesters(self, semesters: List[Semester]) -> "ReviewDataBuilder":
        self._review_data.semesters = semesters
        return self

    def activities(self, activities: List[Activity]) -> "ReviewDataBuilder":
        self._review_data.activities = activities
        return self

    def indicators(self, indicators: List[Indicator]) -> "ReviewDataBuilder":
        self._review_data.indicators = indicators
        return self

    def templates(self, templates: List[Template]) -> "ReviewDataBuilder":
        self._review_data.templates = templates
        return self

    def units(self, units: List[Unit]) -> "ReviewDataBuilder":
        self._review_data.units = units
        return self

    def fields(self, fields: List[Field]) -> "ReviewDataBuilder":
        self._review_data.fields = fields
        return self

    def datas(self, datas: List[ReviewProfile]) -> "ReviewDataBuilder":
        self._review_data.datas = datas
        return self

    def build(self) -> "ReviewData":
        return self._review_data
