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

from __future__ import annotations

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 DestinationType(Enum):
    beach = 'beach'
    mountain = 'mountain'
    urban = 'urban'
    cultural = 'cultural'
    adventure = 'adventure'
    wellness = 'wellness'
    cruise = 'cruise'


class Location(AdCPBaseModel):
    model_config = ConfigDict(
        extra='forbid',
    )
    lat: Annotated[
        float, Field(description='Latitude in decimal degrees (WGS 84).', ge=-90.0, le=90.0)
    ]
    lng: Annotated[
        float, Field(description='Longitude in decimal degrees (WGS 84).', ge=-180.0, le=180.0)
    ]


class DestinationItem(AdCPBaseModel):
    model_config = ConfigDict(
        extra='allow',
    )
    assets: Annotated[
        list[offering_asset_group.OfferingAssetGroup] | None,
        Field(
            description="Typed creative asset pools for this destination. Uses the same OfferingAssetGroup structure as offering-type catalogs. Standard group IDs: 'images_landscape' (destination hero), 'images_vertical' (9:16 for Snap, Stories), 'images_square' (1:1). Enables formats to declare typed image requirements that map unambiguously to the right asset regardless of platform.",
            min_length=1,
        ),
    ] = None
    city: Annotated[str | None, Field(description='City name, if applicable.')] = None
    country: Annotated[
        str | None, Field(description='ISO 3166-1 alpha-2 country code.', pattern='^[A-Z]{2}$')
    ] = None
    description: Annotated[
        str | None,
        Field(description='Destination description highlighting attractions and appeal.'),
    ] = None
    destination_id: Annotated[str, Field(description='Unique identifier for this destination.')]
    destination_type: Annotated[
        DestinationType | None, Field(description='Destination category.')
    ] = None
    ext: ext_1.ExtensionObject | None = None
    image_url: Annotated[AnyUrl | None, Field(description='Destination hero image URL.')] = None
    location: Annotated[
        Location | None, Field(description='Geographic coordinates of the destination.')
    ] = None
    name: Annotated[
        str, Field(description="Destination name (e.g., 'Barcelona', 'Bali', 'Swiss Alps').")
    ]
    price: Annotated[
        price_1.Price | None, Field(description='Starting price for a trip to this destination.')
    ] = None
    rating: Annotated[
        float | None, Field(description='Destination rating (1–5).', ge=1.0, le=5.0)
    ] = None
    region: Annotated[str | None, Field(description='State, province, or region name.')] = None
    tags: Annotated[
        list[str] | None,
        Field(
            description="Tags for filtering (e.g., 'family', 'romantic', 'solo', 'winter-sun').",
            min_length=1,
        ),
    ] = None
    url: Annotated[AnyUrl | None, Field(description='Destination landing page or booking URL.')] = (
        None
    )
