import { AirNavigationUnitId, Bearing, DateTimeMinute, DateTimeMinutePeriod, DateTimeSecond, DateYearMonthDay, DateYearMonthDayPeriod, DistanceNM, LastUpdate, Position, ReplyWithData } from "../Common/types.js";

//#region src/Airspace/types.d.ts
type RouteId = string;
type PublishedPointId = string;
type AerodromeSetId = string;
type AirspaceId = string;
type DBEPointId = string;
type RestrictionId = string;
type TrafficVolumeId = string;
type AerodromeIATAId = string;
type AerodromeIATAOrICAOId = string;
type TrafficVolumeSetId = string;
type TrafficVolumeIdWildcard = string;
type TrafficVolumeSetIdWildcard = string;
type AiracIdentifier = {
  airacId: AIRACId;
} | {
  airacSequenceNumber: number;
};
interface AirSpeed {
  speed: number;
  unit: SpeedUnit;
}
interface NetworkAddress {
  network: 'AFTN' | 'OTHER' | 'SITA';
  address: string;
}
type SpeedUnit = 'FEET_PER_MINUTE' | 'KILOMETERS_PER_HOUR' | 'KNOTS' | 'MACH_NUMBER' | 'UNDEFINED';
type AIRACId = string;
type AerodromeICAOId = string;
interface AIXMFile {
  id: string;
  fileLength: number;
  releaseTime: DateTimeSecond;
  type: string;
}
interface AUPChain {
  chainDate: DateYearMonthDay;
  amcId: AirNavigationUnitId;
  aups: AUPSummary[];
}
interface EAUPChain {
  chainDate: DateYearMonthDay;
  eaups: EAUPSummary[];
}
type AUPId = string;
type AUPType = 'BASELINE' | 'UPDATE';
type AUPState = 'DRAFT' | 'READY' | 'RELEASED';
interface AUPSummary {
  id: AUPId;
  originatingAupId?: AUPId;
  chainDate: DateYearMonthDay;
  amcId?: AirNavigationUnitId;
  aupType: AUPType;
  validityPeriod: DateTimeMinutePeriod;
  releaseTime?: DateTimeMinute;
  aupState: AUPState;
  nilAUP: boolean;
  remark: string;
  note: Array<string>;
  expandedAUP: boolean;
  lastUpdate?: LastUpdate;
  isP3?: boolean;
}
interface EAUPSummary {
  releaseTime: DateTimeMinute;
  validityPeriod: DateTimeMinutePeriod;
  eaupId: EAUPIdentification;
}
interface EAUPIdentification {
  chainDate: DateYearMonthDay;
  sequenceNumber: number;
}
type ADRMessageType = object;
interface AUPManualEntries {
  cdrs?: ADRMessageType;
  rsas?: ADRMessageType;
  radRestrictionActivations?: ADRMessageType;
}
interface AUPComputedEntries {
  implicitCDRs?: ADRMessageType;
  mergedCDRs?: ADRMessageType;
  implicitRSAs?: ADRMessageType;
}
interface AUP {
  summary: AUPSummary;
  aupManualEntries?: AUPManualEntries;
  aupComputedEntries?: AUPComputedEntries;
}
type FlightLevelUnit =
/**
 * Hundreds of feet
 */
'A'
/**
 * Standard flight level
 */ | 'F'
/**
 * Altitude in tens of meters
 */ | 'M'
/**
 * Altitude in meters
 */ | 'MM'
/**
 * Standard metric level in tens of meters
 */ | 'S'
/**
 * Standard metric level in meters
 */ | 'SS';
interface FlightLevel {
  unit: FlightLevelUnit;
  level?: number;
  ground?: boolean;
  ceiling?: boolean;
}
type RunwayId = string;
type TerminalProcedure = {
  id: RouteId;
} | {
  DCT: void;
} | {
  pointId: PublishedPointId;
};
interface ReferenceLocationAerodrome {
  type: 'AERODROME';
  id: AerodromeICAOId;
}
interface ReferenceLocationAerodromeSet {
  type: 'AERODROME_SET';
  id: AerodromeSetId;
}
interface ReferenceLocationAirspace {
  type: 'AIRSPACE';
  id: AirspaceId;
}
interface ReferenceLocationDBEPoint {
  type: 'DBE_POINT';
  id: DBEPointId;
}
interface ReferenceLocationPublishedPoint {
  type: 'PUBLISHED_POINT';
  id: PublishedPointId;
}
type ReferenceLocation = ReferenceLocationAirspace | ReferenceLocationAerodrome | ReferenceLocationAerodromeSet | ReferenceLocationPublishedPoint | ReferenceLocationDBEPoint;
type ReferenceLocationMapper = {
  ReferenceLocationAirspace: ReferenceLocationAirspace;
  ReferenceLocationAerodrome: ReferenceLocationAerodrome;
  ReferenceLocationAerodromeSet: ReferenceLocationAerodromeSet;
  ReferenceLocationPublishedPoint: ReferenceLocationPublishedPoint;
  ReferenceLocationDBEPoint: ReferenceLocationDBEPoint;
};
type ReferenceLocationUnionWithPrefix<TPrefix extends string> = { [TKey in keyof ReferenceLocationMapper]: { [TSubKey in `${TPrefix}-${TKey}`]: ReferenceLocationMapper[TKey] } }[keyof ReferenceLocationMapper];
type ReferenceLocationUnionWithPrefixOptional<TPrefix extends string> = { [TKey in keyof ReferenceLocationMapper]: { [TSubKey in `${TPrefix}-${TKey}`]?: undefined | ReferenceLocationMapper[TKey] } }[keyof ReferenceLocationMapper];
type WithReferenceLocationOnPrefix<TPrefix extends string> = ReferenceLocationUnionWithPrefix<TPrefix>;
type WithReferenceLocationOnPrefixOptional<TPrefix extends string> = ReferenceLocationUnionWithPrefixOptional<TPrefix>;
type FIRICAOId = string;
type FlightPlanProcessing = 'AERODROME_FLIGHT_RULE' | 'DCT_LIMIT' | 'FRA_DCT_LIMIT' | 'PROFILE_TUNING' | 'RAD' | 'SSR_CODE_ALLOCATION' | 'TP_AIRCRAFT_TYPE_CLASSIFICATION';
type LoadState = 'HIGH_THRESHOLD' | 'LOW_THRESHOLD' | 'NORMAL' | 'OVERLOAD' | 'UNDEFINED';
type RouteOrTerminalProcedure = {
  DCT: null;
} | {
  route: RouteId;
} | {
  SID: TerminalProcedureIdentifier;
} | {
  STAR: TerminalProcedureIdentifier;
};
interface TerminalProcedureIdentifier {
  id: RouteId;
  aerodromeId: AerodromeIATAOrICAOId;
}
type AerodromeOrPublishedPointId = {
  aerodrome: AerodromeICAOId;
} | {
  point: PublishedPointId;
};
type ICAOPoint = {
  pointId: PublishedPointId;
} | {
  'nonPublishedPoint-DBEPoint': DBEPoint;
} | {
  'nonPublishedPoint-GeoPoint': GeoPoint;
} | {
  'nonPublishedPoint-ReferencePoint': ReferencePoint;
};
type NonPublishedPoint = GeoPoint | DBEPoint | ReferencePoint;
interface GeoPoint {
  position: Position;
}
interface DBEPoint {
  dbePointId: DBEPointId;
}
interface ReferencePoint {
  reference: PublishedPointId;
  bearing: Bearing;
  distance: DistanceNM;
}
type AirspaceType = 'AOI' | 'AOP' | 'AREA' | 'AUA' | 'AUAG' | 'CDA' | 'CLUS' | 'CRAS' | 'CRSA' | 'CS' | 'ERAS' | 'ERSA' | 'ES' | 'FIR' | 'IFPZ' | 'NAS' | 'REG';
interface CompleteDatasetSummary {
  updateId: string;
  publicationDate: DateYearMonthDay;
  sourceAIRACs: [AiracIdentifier] | [AiracIdentifier, AiracIdentifier];
  files: AIXMFile[];
}
type CompleteDatasetQueryCriteria = {
  publicationPeriod: DateYearMonthDayPeriod;
} | {
  airac: AiracIdentifier;
} | {
  date: DateYearMonthDay;
};
interface FlightLevelRange {
  min: FlightLevel;
  max: FlightLevel;
}
interface CompleteAIXMDatasetRequest {
  queryCriteria: CompleteDatasetQueryCriteria;
}
type CompleteAIXMDatasetReply = ReplyWithData<{
  datasetSummaries: CompleteDatasetSummary[];
}>;
interface AUPRetrievalRequest {
  aupId: AUPId;
  returnComputed?: boolean;
}
type AUPRetrievalReply = ReplyWithData<{
  aup: AUP;
}>;
interface AUPChainRetrievalRequest {
  chainDate: DateYearMonthDay;
  amcIds?: AirNavigationUnitId[];
}
type AUPChainRetrievalReply = ReplyWithData<{
  chains: AUPChain[];
}>;
interface EAUPChainRetrievalRequest {
  chainDate: DateYearMonthDay;
}
type EAUPChainRetrievalReply = ReplyWithData<{
  chain: EAUPChain;
}>;
//#endregion
export { AIRACId, AIXMFile, AUP, AUPChain, AUPChainRetrievalReply, AUPChainRetrievalRequest, AUPComputedEntries, AUPId, AUPManualEntries, AUPRetrievalReply, AUPRetrievalRequest, AUPState, AUPSummary, AUPType, AerodromeIATAId, AerodromeIATAOrICAOId, AerodromeICAOId, AerodromeOrPublishedPointId, AerodromeSetId, AirSpeed, AiracIdentifier, AirspaceId, AirspaceType, CompleteAIXMDatasetReply, CompleteAIXMDatasetRequest, CompleteDatasetQueryCriteria, CompleteDatasetSummary, DBEPoint, DBEPointId, EAUPChain, EAUPChainRetrievalReply, EAUPChainRetrievalRequest, EAUPIdentification, EAUPSummary, FIRICAOId, FlightLevel, FlightLevelRange, FlightLevelUnit, FlightPlanProcessing, GeoPoint, ICAOPoint, LoadState, NetworkAddress, NonPublishedPoint, PublishedPointId, ReferenceLocation, ReferenceLocationAerodrome, ReferenceLocationAerodromeSet, ReferenceLocationAirspace, ReferenceLocationDBEPoint, ReferenceLocationPublishedPoint, ReferenceLocationUnionWithPrefix, ReferenceLocationUnionWithPrefixOptional, ReferencePoint, RestrictionId, RouteId, RouteOrTerminalProcedure, RunwayId, SpeedUnit, TerminalProcedure, TerminalProcedureIdentifier, TrafficVolumeId, TrafficVolumeIdWildcard, TrafficVolumeSetId, TrafficVolumeSetIdWildcard, WithReferenceLocationOnPrefix, WithReferenceLocationOnPrefixOptional };
//# sourceMappingURL=types.d.ts.map