"""File spec_airline.py

Michel Bierlaire, EPFL
Mon Aug 04 2025, 10:03:21

"""

from biogeme.expressions import Beta, log

from variables_airline import (
    Fare_1,
    Fare_2,
    Fare_3,
    Legroom_1,
    Legroom_2,
    Legroom_3,
    Opt1_SchedDelayEarly,
    Opt1_SchedDelayLate,
    Opt2_SchedDelayEarly,
    Opt2_SchedDelayLate,
    Opt3_SchedDelayEarly,
    Opt3_SchedDelayLate,
    TripTimeHours_1,
    TripTimeHours_2,
    TripTimeHours_3,
    purpose_business,
    purpose_business_leisure,
    purpose_conf,
    purpose_leisure,
    purpose_unknown,
)

# Parameters to be estimated

asc_same = Beta('asc_same', 0, None, None, 0)
asc_multiple = Beta('asc_multiple', 0, None, None, 0)

fare_business = Beta('fare_business', 0, None, None, 0)
fare_leisure = Beta('fare_leisure', 0, None, None, 0)
fare_conf = Beta('fare_conf', 0, None, None, 0)
fare_business_leisure = Beta('fare_business_leisure', 0, None, None, 0)
fare_unknown = Beta('fare_unknown', 0, None, None, 0)

FARE = (
    fare_business * purpose_business
    + fare_leisure * purpose_leisure
    + fare_conf * purpose_conf
    + fare_business_leisure * purpose_business_leisure
    + fare_unknown * purpose_unknown
)

legroom = Beta('legroom', 0, None, None, 0)
early = Beta('early', 0, None, None, 0)
late = Beta('late', 0, None, None, 0)
time = Beta('time', 0, None, None, 0)


# Definition of the utility functions
v1 = (
    FARE * Fare_1**0.5
    + legroom * log(Legroom_1)
    + early * Opt1_SchedDelayEarly
    + late * Opt1_SchedDelayLate
    + time * TripTimeHours_1**0.5
)

v2 = (
    asc_same
    + FARE * Fare_2**0.5
    + legroom * log(Legroom_2)
    + early * Opt2_SchedDelayEarly
    + late * Opt2_SchedDelayLate
    + time * TripTimeHours_2**0.5
)

v3 = (
    asc_multiple
    + FARE * Fare_3**0.5
    + legroom * log(Legroom_3)
    + early * Opt3_SchedDelayEarly
    + late * Opt3_SchedDelayLate
    + time * TripTimeHours_3**0.5
)


# Associate utility functions with the numbering of alternatives
v = {1: v1, 2: v2, 3: v3}
