export namespace Journal {
  export type DispatcherSearchKey =
    | 'search-duty-id'
    | 'search-dispatcher'
    | 'search-station'
    | 'search-date-from'
    | 'search-date-to';

  export type TimetableSearchKey =
    | 'search-driver'
    | 'search-train'
    | 'search-date-from'
    | 'search-dispatcher'
    | 'search-includesScenery'
    | 'search-issuedFrom'
    | 'search-terminatingAt'
    | 'search-via'
    | 'select-categoryCode'
    | 'search-headUnit';

  export type TimetableSearchType = {
    [key in TimetableSearchKey]: string;
  };

  export type DispatcherSearchType = {
    [key in DispatcherSearchKey]: string;
  };

  export type TimetableSorterKey = 'timetableId' | 'beginDate' | 'distance' | 'total-stops';
  export type DispatcherSorterKey = 'timestampFrom' | 'currentDuration';

  export interface DispatcherSorter {
    id: DispatcherSorterKey;
    dir: -1 | 1;
  }

  export interface TimetableSorter {
    id: TimetableSorterKey;
    dir: 'asc' | 'desc';
  }

  export const enum TimetableFilterId {
    ALL_STATUSES = 'all-statuses',
    ACTIVE = 'active',
    FULFILLED = 'fulfilled',
    ABANDONED = 'abandoned',
    ALL_SPECIALS = 'all-specials',
    TWR = 'twr',
    SKR = 'skr',
    PN = 'pn',
    TN = 'tn',
    TWR_SKR = 'twr-skr'
  }

  export enum FilterSection {
    TIMETABLE_STATUS = 'timetable-status',
    SPECIAL = 'special'
  }

  export interface TimetableFilter {
    id: TimetableFilterId;
    filterSection: string;
    isActive: boolean;
    default: boolean;
  }

  export interface TimetableStopDetails {
    stopName: string;
    arrivalTimestamp: number;
    scheduledArrivalTimestamp: number;
    departureTimestamp: number;
    scheduledDepartureTimestamp: number;
    stopTime: number;
    stopType: string;
    isConfirmed: boolean;
  }
}
