"""Defines the Preferences used as input for trip generation."""

from typing import Optional, Literal
from pydantic import BaseModel


class Preference(BaseModel) :
    """
    Type of preference.

    Attributes:
        type: what kind of landmark type.
        score: how important that type is.
    """
    type: Literal['sightseeing', 'nature', 'shopping', 'start', 'finish']
    score: int          # score could be from 1 to 5


# Input for optimization
class Preferences(BaseModel) :
    """"
    Full collection of preferences needed to generate a personalized trip.
    """
    # Sightseeing / History & Culture (Musées, bâtiments historiques, opéras, églises)
    sightseeing : Preference

    # Nature (parcs, jardins, rivières, plages)
    nature: Preference

    # Shopping (diriger plutôt vers des zones / rues commerçantes)
    shopping : Preference

    max_time_minute: Optional[int] = 3*60
    detour_tolerance_minute: Optional[int] = 0
