export enum TripStatus {
  NOT_STARTED = 'NOT_STARTED',
  TRIP_STARTED = 'TRIP_STARTED',
  EN_ROUTE_TO_FIRST_STOP = 'EN_ROUTE_TO_FIRST_STOP',
  AT_STOP = 'AT_STOP',
  BOARDING_IN_PROGRESS = 'BOARDING_IN_PROGRESS',
  EN_ROUTE_TO_SCHOOL = 'EN_ROUTE_TO_SCHOOL',
  ARRIVED_AT_SCHOOL = 'ARRIVED_AT_SCHOOL',
  RETURN_TRIP_STARTED = 'RETURN_TRIP_STARTED',
  DROPPING_OFF = 'DROPPING_OFF',
  TRIP_COMPLETED = 'TRIP_COMPLETED',
  DELAYED = 'DELAYED',
  CANCELLED = 'CANCELLED',
}

export const TRIP_STATUS_TRANSITIONS: Record<TripStatus, TripStatus[]> = {
  [TripStatus.NOT_STARTED]: [TripStatus.TRIP_STARTED, TripStatus.CANCELLED],
  [TripStatus.TRIP_STARTED]: [TripStatus.EN_ROUTE_TO_FIRST_STOP, TripStatus.DELAYED, TripStatus.CANCELLED],
  [TripStatus.EN_ROUTE_TO_FIRST_STOP]: [TripStatus.AT_STOP, TripStatus.DELAYED, TripStatus.CANCELLED],
  [TripStatus.AT_STOP]: [TripStatus.BOARDING_IN_PROGRESS, TripStatus.EN_ROUTE_TO_SCHOOL, TripStatus.DELAYED],
  [TripStatus.BOARDING_IN_PROGRESS]: [TripStatus.AT_STOP, TripStatus.EN_ROUTE_TO_SCHOOL, TripStatus.DELAYED],
  [TripStatus.EN_ROUTE_TO_SCHOOL]: [TripStatus.ARRIVED_AT_SCHOOL, TripStatus.AT_STOP, TripStatus.DELAYED],
  [TripStatus.ARRIVED_AT_SCHOOL]: [TripStatus.TRIP_COMPLETED, TripStatus.RETURN_TRIP_STARTED],
  [TripStatus.RETURN_TRIP_STARTED]: [TripStatus.DROPPING_OFF, TripStatus.DELAYED, TripStatus.CANCELLED],
  [TripStatus.DROPPING_OFF]: [TripStatus.TRIP_COMPLETED, TripStatus.DELAYED],
  [TripStatus.TRIP_COMPLETED]: [],
  [TripStatus.DELAYED]: [TripStatus.TRIP_STARTED, TripStatus.EN_ROUTE_TO_FIRST_STOP, TripStatus.AT_STOP, TripStatus.EN_ROUTE_TO_SCHOOL, TripStatus.RETURN_TRIP_STARTED, TripStatus.DROPPING_OFF, TripStatus.CANCELLED],
  [TripStatus.CANCELLED]: [],
};

export const TRIP_STATUS_LABELS: Record<TripStatus, string> = {
  [TripStatus.NOT_STARTED]: 'Not Started',
  [TripStatus.TRIP_STARTED]: 'Trip Started',
  [TripStatus.EN_ROUTE_TO_FIRST_STOP]: 'En Route to First Stop',
  [TripStatus.AT_STOP]: 'At Stop',
  [TripStatus.BOARDING_IN_PROGRESS]: 'Boarding in Progress',
  [TripStatus.EN_ROUTE_TO_SCHOOL]: 'En Route to School',
  [TripStatus.ARRIVED_AT_SCHOOL]: 'Arrived at School',
  [TripStatus.RETURN_TRIP_STARTED]: 'Return Trip Started',
  [TripStatus.DROPPING_OFF]: 'Dropping Off',
  [TripStatus.TRIP_COMPLETED]: 'Trip Completed',
  [TripStatus.DELAYED]: 'Delayed',
  [TripStatus.CANCELLED]: 'Cancelled',
};
