# 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 .note_artifact_info import NoteArtifactInfo
from .note_reference_info import NoteReferenceInfo
from .generated_source import GeneratedSource


class Note(object):
    _types = {
        "creator_id": int,
        "create_time": int,
        "artifacts": List[NoteArtifactInfo],
        "references": List[NoteReferenceInfo],
        "note_source": GeneratedSource,
    }

    def __init__(self, d=None):
        self.creator_id: Optional[int] = None
        self.create_time: Optional[int] = None
        self.artifacts: Optional[List[NoteArtifactInfo]] = None
        self.references: Optional[List[NoteReferenceInfo]] = None
        self.note_source: Optional[GeneratedSource] = None
        init(self, d, self._types)

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


class NoteBuilder(object):
    def __init__(self) -> None:
        self._note = Note()

    def creator_id(self, creator_id: int) -> "NoteBuilder":
        self._note.creator_id = creator_id
        return self

    def create_time(self, create_time: int) -> "NoteBuilder":
        self._note.create_time = create_time
        return self

    def artifacts(self, artifacts: List[NoteArtifactInfo]) -> "NoteBuilder":
        self._note.artifacts = artifacts
        return self

    def references(self, references: List[NoteReferenceInfo]) -> "NoteBuilder":
        self._note.references = references
        return self

    def note_source(self, note_source: GeneratedSource) -> "NoteBuilder":
        self._note.note_source = note_source
        return self

    def build(self) -> "Note":
        return self._note
