import { Angle, SphericalPosition, SphericalPosition3D } from '@tubular/math';
import { IAstroDataService } from './i-astro-data.service';
import { ISkyObserver } from './i-sky-observer';
export interface AsteroidCometElements {
    e: number;
    epoch: string | number;
    i: number;
    L: number;
    Tp: number;
    q: number;
    ω: number;
}
export interface AsteroidCometDescription {
    designation: string;
    G?: number;
    H?: number;
    name: string;
}
export interface AsteroidCometInfo {
    body: AsteroidCometDescription;
    elements: AsteroidCometElements[];
}
export interface EclipseInfo {
    isSolar: boolean;
    pos: SphericalPosition3D;
    radius: number;
    shadowPos: SphericalPosition;
    penumbraRadius: number;
    umbraRadius: number;
    centerSeparation: number;
    penumbralSeparation: number;
    inPenumbra: boolean;
    umbralSeparation: number;
    inUmbra: boolean;
    total: boolean;
    totality?: number;
    penumbralMagnitude?: number;
    annular: boolean;
    hybrid: boolean;
    surfaceShadow: ISkyObserver;
}
export interface RingInfo {
    B: number;
    B1: number;
    P: number;
    a: number;
    b: number;
    dU: number;
}
export interface OrbitalElements {
    L: number;
    a: number;
    e: number;
    i: number;
    Ω: number;
    pi: number;
    ω: number;
    M: number;
    C: number;
    v: number;
    partial: boolean;
}
export interface Libration {
    l: number;
    b: number;
    d: number;
    D: number;
}
export interface EclipseCircumstances {
    annular: boolean;
    duration: number;
    firstContact: number;
    lastContact: number;
    maxEclipse: number;
    maxTime: number;
    peakDuration: number;
    peakEnds?: number;
    peakStarts?: number;
    penumbralDuration?: number;
    penumbralFirstContact?: number;
    penumbralLastContact?: number;
}
export declare function lecToString(lec: EclipseCircumstances): string;
export declare class CircumstancesOfEclipse implements EclipseCircumstances {
    annular: boolean;
    duration: number;
    firstContact: number;
    lastContact: number;
    maxEclipse: number;
    maxTime: number;
    peakDuration: number;
    peakEnds?: number;
    peakStarts?: number;
    penumbralDuration?: number;
    penumbralFirstContact?: number;
    penumbralLastContact?: number;
    constructor(ec: EclipseCircumstances);
    toString(): string;
}
export declare class SolarSystem {
    static createSkyObserver: (longitude: number, latitude: number) => ISkyObserver;
    private static sharedAdditionalsInitPending;
    private static sharedAdditionalsPendingPromise;
    private static sharedAdditionals;
    private ecliptic;
    private moon;
    private planets;
    private pluto;
    private planetNames;
    private planetSymbols;
    private static getPrecision;
    static getGreenwichMeanSiderealTime(time_JDU: number): number;
    static isNominalPlanet(planet: number): boolean;
    static isTruePlanet(planet: number): boolean;
    static isAsteroid(planet: number): boolean;
    static isComet(planet: number): boolean;
    static getAsteroidCount(): number;
    static getCometCount(): number;
    static getAsteroidAndCometNames(forMenu?: boolean, shortMenuNames?: boolean): string[];
    static isAsteroidOrComet(planet: number): boolean;
    static orbitsSun(planet: number): boolean;
    static getOrbitalElements(planet: number, time_JDE: number): OrbitalElements;
    static getHeliocentricPositionFromElements(oe: OrbitalElements): SphericalPosition3D;
    static getMeanOrbitalPeriod(planet: number): number;
    static getMeanConjunctionPeriod(planet: number): number;
    static initAsteroidsAndComets(dataService: IAstroDataService): Promise<boolean>;
    getPlanetName(planet: number): string;
    getPlanetByName(planetName: string): number;
    getPlanetSymbol(planet: number): string;
    getHeliocentricPosition(planet: number, time_JDE: number, flags?: number): SphericalPosition3D;
    getEclipticPosition(planet: number, time_JDE: number, observer?: ISkyObserver, flags?: number, earthTime?: number): SphericalPosition3D;
    getEquatorialPosition(planet: number, time_JDE: number, observer?: ISkyObserver, flags?: number): SphericalPosition3D;
    getGreenwichApparentSiderealTime(time_JDU: number): number;
    getHorizontalPosition(planet: number, time_JDU: number, observer: ISkyObserver, flags?: number): SphericalPosition3D;
    getHourAngle(planet: number, time_JDU: number, observer: ISkyObserver, flags?: number): Angle;
    getParallacticAngle(planet: number, time_JDU: number, observer: ISkyObserver, flags?: number): Angle;
    getLunarPhase(time_JDE: number): number;
    getLunarIlluminatedFraction(time_JDE: number): number;
    protected getCosPhaseAngle(planet: number, time_JDE: number): number;
    getPhaseAngle(planet: number, time_JDE: number): number;
    getIlluminatedFraction(planet: number, time_JDE: number): number;
    getSolarElongation(planet: number, time_JDE: number, observer?: ISkyObserver, flags?: number): number;
    getSolarElongationInLongitude(planet: number, time_JDE: number): number;
    getSaturnRingInfo(time_JDE: number): RingInfo;
    getMagnitude(planet: number, time_JDE: number): number;
    getAngularDiameter(planet: number, time_JDE: number, observer?: ISkyObserver, polarSize?: boolean): number;
    getLunarLibration(time_JDE: number, observer?: ISkyObserver): Libration;
    getLunarEclipseInfo(time_JDE: number, raw?: boolean): EclipseInfo;
    getSolarEclipseInfo(time_JDE: number, locateShadow?: boolean): EclipseInfo;
    getLunarEclipseTotality(time_JDE: number, raw?: boolean, penumbraMagnitude?: number[]): number;
    getLocalSolarEclipseTotality(time_JDE: number, observer: ISkyObserver, raw?: boolean, annularity?: number[]): number;
    getTimeForDegreesOfChange(bodyID: number, startTime_JDE: number, degrees: number, maxTime_JDE: number): number;
}
//# sourceMappingURL=solar-system.d.ts.map