# generated by datamodel-codegen:
#   filename:  assay_schema.json
#   timestamp: 2024-02-07T08:08:38+00:00

from __future__ import annotations

from enum import Enum
from typing import List, Optional

from pydantic import BaseModel, Extra, Field

from . import (comment_schema,
               data_schema,
               material_attribute_schema,
               material_schema,
               ontology_annotation_schema,
               process_schema,
               sample_schema)


class FieldType(Enum):
    Assay = 'Assay'


class IsaAssayJsonSchema(BaseModel):
    class Config:
        extra = Extra.forbid

    field_id: Optional[str] = Field(None, alias='@id')
    field_context: Optional[str] = Field(None, alias='@context')
    field_type: Optional[FieldType] = Field(None, alias='@type')
    filename: Optional[str] = None
    measurementType: Optional[ontology_annotation_schema.IsaOntologyReferenceSchema] = (None)
    technologyType: Optional[ontology_annotation_schema.IsaOntologyReferenceSchema] = (None)
    technologyPlatform: Optional[str] = None
    dataFiles: Optional[List[data_schema.IsaDataSchema]] = None
    materials: Optional[Materials] = None
    characteristicCategories: Optional[List[
        material_attribute_schema.IsaMaterialAttributeSchema]] = Field(
            None,
            description=
            'List of all the characteristics categories (or material attributes) defined in the study, used to avoid duplication of their declaration when each material_attribute_value is created. ',
        )
    unitCategories: Optional[List[ontology_annotation_schema.IsaOntologyReferenceSchema]] = Field(
        None,
        description=
        'List of all the unitsdefined in the study, used to avoid duplication of their declaration when each value is created. ',
    )
    processSequence: Optional[List[
        process_schema.
        IsaProcessOrProtocolApplicationSchemaCorrespondsToProtocolRefColumnsInTheStudyAndAssayFiles]] = None
    comments: Optional[List[
        comment_schema.IsaCommentSchemaItCorrespondsToIsaCommentConstruct]] = None


class Materials(BaseModel):
    samples: Optional[List[sample_schema.IsaSampleSchema]] = None
    otherMaterials: Optional[List[material_schema.IsaMaterialSchema]] = None
