# generated by datamodel-codegen:
#   filename:  core/education_item.json
#   timestamp: 2026-02-27T02:10:10+00:00

from __future__ import annotations

from datetime import date as date_aliased
from enum import Enum
from typing import Annotated

from adcp.types.base import AdCPBaseModel
from pydantic import AnyUrl, ConfigDict, Field

from . import ext as ext_1
from . import offering_asset_group
from . import price as price_1


class DegreeType(Enum):
    certificate = 'certificate'
    associate = 'associate'
    bachelor = 'bachelor'
    master = 'master'
    doctorate = 'doctorate'
    professional = 'professional'
    bootcamp = 'bootcamp'


class Level(Enum):
    beginner = 'beginner'
    intermediate = 'intermediate'
    advanced = 'advanced'


class Modality(Enum):
    online = 'online'
    in_person = 'in_person'
    hybrid = 'hybrid'


class EducationItem(AdCPBaseModel):
    model_config = ConfigDict(
        extra='allow',
    )
    assets: Annotated[
        list[offering_asset_group.OfferingAssetGroup] | None,
        Field(
            description="Typed creative asset pools for this program. Uses the same OfferingAssetGroup structure as offering-type catalogs. Standard group IDs: 'images_landscape' (campus/program hero), 'images_vertical' (9:16 for Stories), 'logo' (institution logo). Enables formats to declare typed image requirements that map unambiguously to the right asset regardless of platform.",
            min_length=1,
        ),
    ] = None
    degree_type: Annotated[DegreeType | None, Field(description='Type of credential awarded.')] = (
        None
    )
    description: Annotated[
        str | None,
        Field(description='Program description including curriculum highlights and outcomes.'),
    ] = None
    duration: Annotated[
        str | None,
        Field(
            description="Program duration as a human-readable string (e.g., '4 weeks', '2 years', '6 months')."
        ),
    ] = None
    ext: ext_1.ExtensionObject | None = None
    image_url: Annotated[AnyUrl | None, Field(description='Program or institution image URL.')] = (
        None
    )
    language: Annotated[
        str | None, Field(description="Language of instruction (e.g., 'en', 'nl', 'es').")
    ] = None
    level: Annotated[Level | None, Field(description='Difficulty or prerequisite level.')] = None
    location: Annotated[
        str | None,
        Field(
            description="Campus or instruction location (e.g., 'Amsterdam, NL'). Omit for fully online programs."
        ),
    ] = None
    modality: Annotated[Modality | None, Field(description='Delivery format.')] = None
    name: Annotated[
        str,
        Field(
            description="Program or course name (e.g., 'MSc Computer Science', 'Digital Marketing Certificate')."
        ),
    ]
    price: Annotated[price_1.Price | None, Field(description='Tuition or course fee.')] = None
    program_id: Annotated[str, Field(description='Unique identifier for this program or course.')]
    school: Annotated[str, Field(description='Institution or provider name.')]
    start_date: Annotated[
        date_aliased | None, Field(description='Next available start date (ISO 8601 date).')
    ] = None
    subject: Annotated[
        str | None,
        Field(
            description="Subject area or field of study (e.g., 'computer-science', 'business', 'healthcare')."
        ),
    ] = None
    tags: Annotated[
        list[str] | None,
        Field(
            description="Tags for filtering (e.g., 'stem', 'scholarship-available', 'evening-classes').",
            min_length=1,
        ),
    ] = None
    url: Annotated[AnyUrl | None, Field(description='Program landing page or enrollment URL.')] = (
        None
    )
