# 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 .grade_standard_value import GradeStandardValue
from .grade_standard_dimension import GradeStandardDimension
from .currency import Currency
from .i18n import I18n


class Grade(object):
    _types = {
        "id": str,
        "tid": str,
        "serial_number": str,
        "grade_standard_values": List[GradeStandardValue],
        "dimensions": List[GradeStandardDimension],
        "currency": Currency,
        "description": I18n,
        "effective_time": str,
        "standard_grade_version": str,
        "created_at": str,
        "updated_at": str,
        "standard_id": str,
        "standard_kind": int,
    }

    def __init__(self, d=None):
        self.id: Optional[str] = None
        self.tid: Optional[str] = None
        self.serial_number: Optional[str] = None
        self.grade_standard_values: Optional[List[GradeStandardValue]] = None
        self.dimensions: Optional[List[GradeStandardDimension]] = None
        self.currency: Optional[Currency] = None
        self.description: Optional[I18n] = None
        self.effective_time: Optional[str] = None
        self.standard_grade_version: Optional[str] = None
        self.created_at: Optional[str] = None
        self.updated_at: Optional[str] = None
        self.standard_id: Optional[str] = None
        self.standard_kind: Optional[int] = None
        init(self, d, self._types)

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


class GradeBuilder(object):
    def __init__(self) -> None:
        self._grade = Grade()

    def id(self, id: str) -> "GradeBuilder":
        self._grade.id = id
        return self

    def tid(self, tid: str) -> "GradeBuilder":
        self._grade.tid = tid
        return self

    def serial_number(self, serial_number: str) -> "GradeBuilder":
        self._grade.serial_number = serial_number
        return self

    def grade_standard_values(self, grade_standard_values: List[GradeStandardValue]) -> "GradeBuilder":
        self._grade.grade_standard_values = grade_standard_values
        return self

    def dimensions(self, dimensions: List[GradeStandardDimension]) -> "GradeBuilder":
        self._grade.dimensions = dimensions
        return self

    def currency(self, currency: Currency) -> "GradeBuilder":
        self._grade.currency = currency
        return self

    def description(self, description: I18n) -> "GradeBuilder":
        self._grade.description = description
        return self

    def effective_time(self, effective_time: str) -> "GradeBuilder":
        self._grade.effective_time = effective_time
        return self

    def standard_grade_version(self, standard_grade_version: str) -> "GradeBuilder":
        self._grade.standard_grade_version = standard_grade_version
        return self

    def created_at(self, created_at: str) -> "GradeBuilder":
        self._grade.created_at = created_at
        return self

    def updated_at(self, updated_at: str) -> "GradeBuilder":
        self._grade.updated_at = updated_at
        return self

    def standard_id(self, standard_id: str) -> "GradeBuilder":
        self._grade.standard_id = standard_id
        return self

    def standard_kind(self, standard_kind: int) -> "GradeBuilder":
        self._grade.standard_kind = standard_kind
        return self

    def build(self) -> "Grade":
        return self._grade
