"""File variables_airline.py

Michel Bierlaire, EPFL
Mon Aug 04 2025, 10:05:35
"""

import pandas as pd
from biogeme.database import Database
from biogeme.expressions import Variable

df = pd.read_csv('airline.dat', sep='\t')
database = Database('airline', df)

Legroom_1 = Variable('Legroom_1')
Legroom_2 = Variable('Legroom_2')
Legroom_3 = Variable('Legroom_3')
Fare_1 = Variable('Fare_1')
Fare_2 = Variable('Fare_2')
Fare_3 = Variable('Fare_3')
TripTimeHours_1 = Variable('TripTimeHours_1')
TripTimeHours_2 = Variable('TripTimeHours_2')
TripTimeHours_3 = Variable('TripTimeHours_3')
BestAlternative_1 = Variable('BestAlternative_1')
BestAlternative_2 = Variable('BestAlternative_2')
BestAlternative_3 = Variable('BestAlternative_3')
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')
DepartureTimeMins_2 = Variable('DepartureTimeMins_2')
ArrivalTimeMins_2 = Variable('ArrivalTimeMins_2')
DepartureTimeMins_3 = Variable('DepartureTimeMins_3')
ArrivalTimeMins_3 = Variable('ArrivalTimeMins_3')
q02_TripPurpose = Variable('q02_TripPurpose')
ArrivalTimeHours_1 = Variable('ArrivalTimeHours_1')

chosenAlternative = (
    (BestAlternative_1 * 1) + (BestAlternative_2 * 2) + (BestAlternative_3 * 3)
)

DepartureTimeSensitive = database.define_variable(
    'DepartureTimeSensitive', q11_DepartureOrArrivalIsImportant == 1
)
ArrivalTimeSensitive = database.define_variable(
    'ArrivalTimeSensitive', q11_DepartureOrArrivalIsImportant == 2
)
Missing = database.define_variable(
    'Missing',
    (q11_DepartureOrArrivalIsImportant != 1) * (q11_DepartureOrArrivalIsImportant != 2),
)

DesiredDepartureTime = database.define_variable(
    'desired_departure_time', q12_IdealDepTime
)
DesiredArrivalTime = database.define_variable('desired_arrival_time', q13_IdealArrTime)
ScheduledDelay_1 = database.define_variable(
    'scheduled_delay_1',
    (DepartureTimeSensitive * (DepartureTimeMins_1 - DesiredDepartureTime))
    + (ArrivalTimeSensitive * (ArrivalTimeMins_1 - DesiredArrivalTime)),
)

ScheduledDelay_2 = database.define_variable(
    'scheduled_delay_2',
    (DepartureTimeSensitive * (DepartureTimeMins_2 - DesiredDepartureTime))
    + (ArrivalTimeSensitive * (ArrivalTimeMins_2 - DesiredArrivalTime)),
)

ScheduledDelay_3 = database.define_variable(
    'scheduled_delay_3',
    (DepartureTimeSensitive * (DepartureTimeMins_3 - DesiredDepartureTime))
    + (ArrivalTimeSensitive * (ArrivalTimeMins_3 - DesiredArrivalTime)),
)

Opt1_SchedDelayEarly = database.define_variable(
    'opt1_sched_delay_early', (-(ScheduledDelay_1) * (ScheduledDelay_1 < 0)) / 60
)
Opt2_SchedDelayEarly = database.define_variable(
    'opt2_sched_delay_early', (-(ScheduledDelay_2) * (ScheduledDelay_2 < 0)) / 60
)
Opt3_SchedDelayEarly = database.define_variable(
    'opt3_sched_delay_early', (-(ScheduledDelay_3) * (ScheduledDelay_3 < 0)) / 60
)

Opt1_SchedDelayLate = database.define_variable(
    'opt1_sched_delay_late', (ScheduledDelay_1 * (ScheduledDelay_1 > 0)) / 60
)
Opt2_SchedDelayLate = database.define_variable(
    'opt2_sched_delay_late', (ScheduledDelay_2 * (ScheduledDelay_2 > 0)) / 60
)
Opt3_SchedDelayLate = database.define_variable(
    'opt3_sched_delay_late', (ScheduledDelay_3 * (ScheduledDelay_3 > 0)) / 60
)

purpose_business = database.define_variable('purpose_business', q02_TripPurpose == 1)

purpose_leisure = database.define_variable('purpose_leisure', q02_TripPurpose == 2)

purpose_conf = database.define_variable('purpose_conf', q02_TripPurpose == 3)

purpose_business_leisure = database.define_variable(
    'purpose_business_leisure', q02_TripPurpose == 4
)

purpose_unknown = database.define_variable('purpose_unknown', q02_TripPurpose == 0)


exclude = ArrivalTimeHours_1 == -1
database.remove(exclude)
