import { DegreesType, ExtensionsType, LatitudeType, LongitudeType, Token, TokenAST } from "../types.js";
import { IProcessingContext } from "../core/base.js";
export interface BoundsType {
    minlat?: LatitudeType;
    minlon?: LongitudeType;
    maxlat?: LatitudeType;
    maxlon?: LongitudeType;
}
export interface PersonType {
    name?: string;
    email?: EmailType;
    link?: LinkType;
}
export interface CopyrightType {
    author?: string;
    year?: string;
    license?: string;
}
export interface EmailType {
    id?: string;
    domain?: string;
}
type FixType = "none" | "2d" | "3d" | "dgps" | "pps" | string;
export type LinkType = {
    href?: string;
    text?: string;
    type?: string;
};
export interface GPX11Type {
    version?: string;
    creator?: string;
    xmlns?: string;
    "xmlns:gte"?: string;
    "xmlns:xsi"?: string;
    "xsi:schemaLocation"?: string;
    metadata?: MetadataType;
    wpt?: WptType[];
    rte?: RteType[];
    trk?: TrkType[];
    extensions?: any;
    [key: string]: any | undefined;
}
export interface MetadataType {
    name?: string;
    desc?: string;
    author?: PersonType;
    copyright?: CopyrightType;
    link?: LinkType[];
    time?: Date;
    keywords?: string;
    bounds?: BoundsType;
    extensions?: ExtensionsType;
    [key: string]: any;
}
export interface WptType {
    lat?: LatitudeType;
    lon?: LongitudeType;
    ele?: number;
    time?: Date;
    speed?: number;
    course?: number;
    magvar?: DegreesType;
    geoidheight?: number;
    name?: string;
    cmt?: string;
    desc?: string;
    src?: string;
    link?: LinkType[];
    sym?: string;
    type?: string;
    fix?: FixType;
    sat?: string;
    hdop?: number;
    vdop?: number;
    pdop?: number;
    ageofdgpsdata?: number;
    dgpsid?: DegreesType;
    extensions?: ExtensionsType;
    power?: number;
    heartRate?: number;
    cadence?: number;
}
type RteptType = WptType;
export interface RteType {
    name?: string;
    cmt?: string;
    desc?: string;
    src?: string;
    link?: LinkType[];
    number?: number;
    type?: string;
    extensions?: ExtensionsType;
    rtept?: RteptType[];
}
export interface TrkType {
    name?: string;
    cmt?: string;
    desc?: string;
    src?: string;
    link?: LinkType[];
    number?: number;
    type?: string;
    extensions?: ExtensionsType;
    trkseg?: TrksegType[];
}
export interface TrksegType {
    trkpt?: WptType[];
    extensions?: ExtensionsType;
}
export interface DecoderContext extends IProcessingContext {
    rawData?: Buffer;
    xmlContent?: string;
    tokens?: Token[];
    ast?: TokenAST;
    result?: GPX11Type;
    performance: {
        startTime: number;
        tokenizeTime?: number;
        astTime?: number;
        convertTime?: number;
        endTime?: number;
    };
}
export {};
