# generated by datamodel-codegen:
#   filename:  core/creative_brief.json
#   timestamp: 2026-02-18T17:56:28+00:00

from __future__ import annotations

from enum import Enum
from typing import Annotated

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

from . import reference_asset


class Messaging(AdCPBaseModel):
    model_config = ConfigDict(
        extra='allow',
    )
    cta: Annotated[str | None, Field(description='Call-to-action text')] = None
    headline: Annotated[str | None, Field(description='Primary headline')] = None
    key_messages: Annotated[
        list[str] | None, Field(description='Key messages to communicate in priority order')
    ] = None
    tagline: Annotated[str | None, Field(description='Supporting tagline or sub-headline')] = None


class Objective(Enum):
    awareness = 'awareness'
    consideration = 'consideration'
    conversion = 'conversion'
    retention = 'retention'
    engagement = 'engagement'


class CreativeBrief(AdCPBaseModel):
    model_config = ConfigDict(
        extra='allow',
    )
    audience: Annotated[
        str | None, Field(description='Target audience description for this campaign')
    ] = None
    messaging: Annotated[
        Messaging | None, Field(description='Messaging framework for the campaign')
    ] = None
    name: Annotated[str, Field(description='Campaign or flight name for identification')]
    objective: Annotated[
        Objective | None,
        Field(
            description='Campaign objective that guides creative tone and call-to-action strategy'
        ),
    ] = None
    reference_assets: Annotated[
        list[reference_asset.ReferenceAsset] | None,
        Field(
            description='Visual and strategic reference materials such as mood boards, product shots, example creatives, and strategy documents'
        ),
    ] = None
    territory: Annotated[
        str | None,
        Field(description='Creative territory or positioning the campaign should occupy'),
    ] = None
    tone: Annotated[
        str | None,
        Field(
            description="Desired tone for this campaign, modulating the brand's base tone (e.g., 'playful and festive', 'premium and aspirational')"
        ),
    ] = None
