/**
 * @module natural-time-js/core
 * @description This module provides the core NaturalDate class that bridges between artificial Gregorian time and Natural Time.
 */
/**
 * Natural date class for converting artificial (Gregorian) dates to natural time.
 *
 * The NaturalDate class provides a complete implementation of the natural time system,
 * which is based on natural cycles:
 * - Years begin at the winter solstice
 * - Each year has 13 moons (months) of 28 days each, plus 1-2 "rainbow days"
 * - Weeks are 7 days
 * - Time is measured in 360 degrees for a full day cycle
 *
 * This class handles the conversion between Gregorian calendar dates and natural time,
 * accounting for longitude adjustments to provide location-specific natural time.
 */
export declare class NaturalDate {
    /**
     * Number of milliseconds in a day
     */
    static readonly MILLISECONDS_PER_DAY: number;
    /**
     * End date of the artificial time era (December 21, 2012 12:00 UTC)
     * This is the reference point for natural time calculations
     */
    static readonly END_OF_ARTIFICIAL_TIME: number;
    /** Artificial gregorian date (UNIX timestamp) */
    readonly unixTime: number;
    /** Longitude in degrees (-180° to +180°) as provided */
    readonly longitude: number;
    /**
     * Number of decimal places used for longitude in calculations (default: 0).
     * - 0 → integer zones, 360 discrete NT zones (e.g. 1.57° → 1°)
     * - 1 → 0.1° precision, 3600 zones        (e.g. 1.57° → 1.5°)
     * - n → 10^n zones globally
     * - Infinity → exact solar longitude, fully analog
     */
    readonly precision: number;
    /**
     * The longitude value actually used in calculations, truncated to `precision`
     * decimal places. Equals longitude when precision is Infinity.
     */
    readonly effectiveLongitude: number;
    /** Current natural year (year 001: winter solstice 2012 > winter solstice 2013) */
    readonly year: number;
    /** Current moon (month) in the natural year (1-14) */
    readonly moon: number;
    /** Current week of the natural year (1-53) */
    readonly week: number;
    /** Current week within the current moon (1-4) */
    readonly weekOfMoon: number;
    /** Number of days passed since END_OF_ARTIFICIAL_TIME */
    readonly day: number;
    /** Current day of the natural year (1-366) */
    readonly dayOfYear: number;
    /** Current day of the moon (1-28) */
    readonly dayOfMoon: number;
    /** Current day of the week (1-7) */
    readonly dayOfWeek: number;
    /** True if current day is a rainbow day (day beyond the 13 moons) */
    readonly isRainbowDay: boolean;
    /** Current time in natural degrees (0-360°) */
    readonly time: number;
    /** Beginning of the natural year at the current longitude (UNIX timestamp) */
    readonly yearStart: number;
    /** Number of days in the current natural year (365 or 366) */
    readonly yearDuration: number;
    /** Beginning of the current natural day at the current longitude (UNIX timestamp) */
    readonly nadir: number;
    /**
     * Creates a new natural date instance.
     *
     * Converts a Gregorian date to natural time based on the specified longitude.
     * The longitude is used to adjust the natural time for the local position on Earth.
     *
     * @param date - JavaScript Date object, Unix timestamp, or date string
     * @param longitude - Longitude in degrees (-180 to 180)
     * @param precision - Number of decimal places used for longitude in calculations (default: 0).
     *   - 0 → integer zones, 360 discrete NT zones (e.g. 2.3522° → 2°)
     *   - 1 → 0.1° precision, 3600 zones        (e.g. 2.3522° → 2.3°)
     *   - Infinity → exact solar longitude, fully analog
     * @throws {Error} If inputs are invalid
     *
     * @example
     * // Default (precision=0) — Paris 2.3522° → calculated as if at 2°
     * const parisNaturalDate = new NaturalDate(new Date(), 2.3522);
     *
     * @example
     * // Analog mode — uses exact longitude
     * const parisAnalog = new NaturalDate(new Date(), 2.3522, Infinity);
     */
    constructor(date: Date | number | string | null | undefined, longitude?: number, precision?: number);
    /**
     * Gets the time of an astronomical event in natural degrees.
     *
     * Converts an event timestamp to natural degrees (0-360°) within the current natural day.
     * Returns false if the event occurs outside the current natural day.
     *
     * This is useful for calculating the position of celestial events like sunrise, sunset,
     * moonrise, or moonset within the natural time system.
     *
     * @param event - Event timestamp (Date object, Unix timestamp, or date string)
     * @returns Event time in natural degrees (0-360°) or false if out of range
     *
     * @example
     * // Calculate sunrise time in natural degrees
     * const naturalDate = new NaturalDate(new Date(), 0);
     * const sunrise = '2023-01-01T06:00:00'; // Example sunrise at 6:00 AM
     * const sunriseInDegrees = naturalDate.getTimeOfEvent(sunrise);
     * console.log(`Sunrise occurs at ${sunriseInDegrees}°`);
     */
    getTimeOfEvent(event: Date | number | string): number | false;
    /**
     * Exports current date as a full ISO formatted string.
     *
     * The format is: "YYY)MM)DD TTT°DD NT±LLL.L"
     * - YYY: Natural year (padded to 3 digits)
     * - MM: Moon number (padded to 2 digits)
     * - DD: Day of moon (padded to 2 digits)
     * - TTT: Time in degrees (padded to 3 digits)
     * - DD: Decimal degrees (2 digits)
     * - ±LLL.L: Longitude with sign and 1 decimal
     *
     * @returns {string} Formatted natural date string
     */
    toString(): string;
    /**
     * Exports the date part of the natural date.
     *
     * @param separator - Separator character between components (default: ')')
     * @returns Formatted date string
     */
    toDateString(separator?: string): string;
    /**
     * Exports the time part of the natural date.
     *
     * @param decimals - Number of decimal places for time (default: 2)
     * @param rounding - Rounding increment for time (default: 1)
     * @returns Formatted time string
     */
    toTimeString(decimals?: number, rounding?: number): string;
    /**
     * Exports the longitude part of the natural date.
     *
     * @param decimals - Number of decimal places for longitude.
     *   Defaults to `this.precision` so the displayed zone matches the one used in calculations
     *   (e.g. precision=0 → "NT+2", precision=1 → "NT+2.3").
     *   When precision is Infinity, defaults to 0 (integer zone label).
     * @returns Formatted longitude string
     */
    toLongitudeString(decimals?: number): string;
    /**
     * Exports the year part of the natural date.
     *
     * @returns Formatted year string
     */
    toYearString(): string;
    /**
     * Exports the moon part of the natural date.
     *
     * @returns Formatted moon string
     */
    toMoonString(): string;
    /**
     * Exports the day of moon part of the natural date.
     *
     * @returns Formatted day of moon string
     */
    toDayOfMoonString(): string;
}
/**
 * Clears the internal year context cache.
 * Exposed for testing or advanced usage without exposing the cache itself.
 */
export declare function resetYearContextCache(): void;
