"""Definition of the variables for the airline case study

Michel Bierlaire
Thu Aug 07 2025, 08:52:08
"""

import pandas as pd
from biogeme.database import Database
from biogeme.expressions import Variable

data = pd.read_table('airline.dat', sep='\t')
database = Database('airline', data)

BestAlternative_1 = Variable('BestAlternative_1')
BestAlternative_2 = Variable('BestAlternative_2')
BestAlternative_3 = Variable('BestAlternative_3')
Missing = Variable('Missing')
q11_DepartureOrArrivalIsImportant = Variable('q11_DepartureOrArrivalIsImportant')
q12_IdealDepTime = Variable('q12_IdealDepTime')
q13_IdealArrTime = Variable('q13_IdealArrTime')
DepartureTimeMins_1 = Variable('DepartureTimeMins_1')
ArrivalTimeMins_1 = Variable('ArrivalTimeMins_1')
ArrivalTimeHours_1 = Variable('ArrivalTimeHours_1')
DepartureTimeMins_2 = Variable('DepartureTimeMins_2')
ArrivalTimeMins_2 = Variable('ArrivalTimeMins_2')
DepartureTimeMins_3 = Variable('DepartureTimeMins_3')
ArrivalTimeMins_3 = Variable('ArrivalTimeMins_3')
Opt1_SchedDelayEarly = Variable('opt1_sched_delay_early')
Opt2_SchedDelayEarly = Variable('opt2_sched_delay_early')
Opt3_SchedDelayEarly = Variable('opt3_sched_delay_early')
Opt1_SchedDelayLate = Variable('opt1_sched_delay_late')
Opt2_SchedDelayLate = Variable('opt2_sched_delay_late')
Opt3_SchedDelayLate = Variable('opt3_sched_delay_late')
Fare_1 = Variable('Fare_1')
Fare_2 = Variable('Fare_2')
Fare_3 = Variable('Fare_3')
Legroom_1 = Variable('Legroom_1')
Legroom_2 = Variable('Legroom_2')
Legroom_3 = Variable('Legroom_3')
TripTimeHours_1 = Variable('TripTimeHours_1')
TripTimeHours_2 = Variable('TripTimeHours_2')
TripTimeHours_3 = Variable('TripTimeHours_3')


exclude = ArrivalTimeHours_1 == -1
database.remove(exclude)


chosenAlternative = (
    BestAlternative_1 * 1 + BestAlternative_2 * 2 + BestAlternative_3 * 3
)
DepartureTimeSensitive = q11_DepartureOrArrivalIsImportant == 1
ArrivalTimeSensitive = q11_DepartureOrArrivalIsImportant == 2
Missing = (q11_DepartureOrArrivalIsImportant != 1) * (
    q11_DepartureOrArrivalIsImportant != 2
)
DesiredDepartureTime = q12_IdealDepTime
DesiredArrivalTime = q13_IdealArrTime
ScheduledDelay_1 = DepartureTimeSensitive * (
    DepartureTimeMins_1 - DesiredDepartureTime
) + ArrivalTimeSensitive * (ArrivalTimeMins_1 - DesiredArrivalTime)
ScheduledDelay_2 = DepartureTimeSensitive * (
    DepartureTimeMins_2 - DesiredDepartureTime
) + ArrivalTimeSensitive * (ArrivalTimeMins_2 - DesiredArrivalTime)
ScheduledDelay_3 = DepartureTimeSensitive * (
    DepartureTimeMins_3 - DesiredDepartureTime
) + ArrivalTimeSensitive * (ArrivalTimeMins_3 - DesiredArrivalTime)
Opt1_SchedDelayEarly = -ScheduledDelay_1 * (ScheduledDelay_1 < 0) / 60
Opt2_SchedDelayEarly = -ScheduledDelay_2 * (ScheduledDelay_2 < 0) / 60
Opt3_SchedDelayEarly = -ScheduledDelay_3 * (ScheduledDelay_3 < 0) / 60
Opt1_SchedDelayLate = ScheduledDelay_1 * (ScheduledDelay_1 > 0) / 60
Opt2_SchedDelayLate = ScheduledDelay_2 * (ScheduledDelay_2 > 0) / 60
Opt3_SchedDelayLate = ScheduledDelay_3 * (ScheduledDelay_3 > 0) / 60
