import { getCurrentInstruction, preProcessPath } from './Instructions';
import MapView from './MapView';
import {
  COMMANDS_FROM_MAP,
  DISTANCE_UNIT,
  EVENTS_FROM_ODP,
  MAP_EVENT_LISTENER,
  MAP_LOCALE,
  MAP_SIMULATION_REFERENCE,
  MAP_VIEW_REFERENCE,
  ODP_EVENT_LISTENER,
  ODP_VIEW_REFERENCE,
  SIMULATION_COMMAND,
} from './CommandTypes';
import {
  JIBESTREAM_DESTINATION,
  JIBESTREAM_WAYPOINT,
  JIBESTREAM_PATH,
  JIBESTREAM_LOCATION,
  JIBESTREAM_STYLE,
  INSTRUCTION,
  MAP_CREDENTIALS,
  MAP_TAP_EVENT,
  MAP_OPTIONS,
  JIBESTREAM_GEOFENCE,
  GEOJSON_PATH,
  SIMULATION_OPTIONS,
  SIMULATION_PATH,
  SIMULATION_STATUS,
  SIMULATION_STATUS_VALUES,
} from './JibestreamTypes';
import { ODP_ON_FACILITY_UPDATE } from './schemas/OdpOnFacilityUpdateType';
import { ODP_ON_KEY_VALIDATION } from './schemas/OdpOnKeyValidationType';
import { ODP_ON_NAVIGATION_UPDATE } from './schemas/OdpOnNavigationUpdateType';
import { ODP_ON_READY } from './schemas/OdpOnReadyType';
import { jibestreamApi } from './api/jibestreamApi';
import OdpView from './OdpView';

export const JMapView = MapView;
export const JOdpViewModule = OdpView;
export const JibestreamApi = jibestreamApi;
export const Utilities = {
  getCurrentInstruction,
  preProcessPath,
};

export type COMMANDS_FROM_MAP_TYPE = COMMANDS_FROM_MAP;
export type EVENTS_FROM_ODP_TYPE = EVENTS_FROM_ODP;
export type MAP_EVENT_LISTENER_TYPE = MAP_EVENT_LISTENER;
export type ODP_EVENT_LISTENER_TYPE = ODP_EVENT_LISTENER;
export type MAP_VIEW_REFERENCE_TYPE = MAP_VIEW_REFERENCE;
export type ODP_VIEW_REFERENCE_TYPE = ODP_VIEW_REFERENCE;
export type MAP_SIMULATION_REFERENCE_TYPE = MAP_SIMULATION_REFERENCE;
export type JIBESTREAM_DESTINATION_TYPE = JIBESTREAM_DESTINATION;
export type JIBESTREAM_WAYPOINT_TYPE = JIBESTREAM_WAYPOINT;
export type JIBESTREAM_PATH_TYPE = JIBESTREAM_PATH;
export type JIBESTREAM_LOCATION_TYPE = JIBESTREAM_LOCATION;
export type JIBESTREAM_STYLE_TYPE = JIBESTREAM_STYLE;
export type JIBESTREAM_GEOFENCE_TYPE = JIBESTREAM_GEOFENCE;
export type SIMULATION_STATUS_TYPE = SIMULATION_STATUS;
export type SIMULATION_PATH_TYPE = SIMULATION_PATH;
export type SIMULATION_OPTIONS_TYPE = SIMULATION_OPTIONS;
export type SIMULATION_COMMAND_TYPE = SIMULATION_COMMAND;
export type SIMULATION_STATUS_VALUES_TYPE = SIMULATION_STATUS_VALUES;
export type GEOJSON_PATH_TYPE = GEOJSON_PATH;
export type INSTRUCTION_TYPE = INSTRUCTION;
export type MAP_OPTIONS_TYPE = MAP_OPTIONS;
export type MAP_LOCALE_TYPE = MAP_LOCALE;
export type DISTANCE_UNIT_TYPE = DISTANCE_UNIT;
export type MAP_TAP_EVENT_TYPE = MAP_TAP_EVENT;
export type MAP_CREDENTIALS_TYPE = MAP_CREDENTIALS;
export type ODP_ON_FACILITY_UPDATE_TYPE = ODP_ON_FACILITY_UPDATE;
export type ODP_ON_KEY_VALIDATION_TYPE = ODP_ON_KEY_VALIDATION;
export type ODP_ON_NAVIGATION_UPDATE_TYPE = ODP_ON_NAVIGATION_UPDATE;
export type ODP_ON_READY_TYPE = ODP_ON_READY;
