// generated by diplomat-tool
import type { Date } from "./Date"
import type { IsoDate } from "./IsoDate"
import type { IsoDateTime } from "./IsoDateTime"
import type { Time } from "./Time"
import type { TimeZone } from "./TimeZone"
import type { TimeZoneVariant } from "./TimeZoneVariant"
import type { UtcOffset } from "./UtcOffset"
import type { VariantOffsetsCalculator } from "./VariantOffsetsCalculator"
import type { pointer, codepoint } from "./diplomat-runtime.d.ts";



/**
 * See the [Rust documentation for `TimeZoneInfo`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html) for more information.
 */
export class TimeZoneInfo {
    /** @internal */
    get ffiValue(): pointer;


    /**
     * Creates a time zone for UTC (Coordinated Universal Time).
     *
     * See the [Rust documentation for `utc`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html#method.utc) for more information.
     */
    static utc(): TimeZoneInfo;

    /**
     * See the [Rust documentation for `id`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html#method.id) for more information.
     */
    get id(): TimeZone;

    /**
     * Sets the datetime at which to interpret the time zone
     * for display name lookup.
     *
     * Notes:
     *
     * - If not set, the formatting datetime is used if possible.
     * - If the offset is not set, the datetime is interpreted as UTC.
     * - The constraints are the same as with `ZoneNameTimestamp` in Rust.
     * - Set to year 1000 or 9999 for a reference far in the past or future.
     *
     * See the [Rust documentation for `at_date_time`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html#method.at_date_time) for more information.
     *
     * Additional information: [1](https://docs.rs/icu/2.2.0/icu/time/zone/struct.ZoneNameTimestamp.html)
     */
    atDateTimeIso(date: IsoDate, time: Time): TimeZoneInfo;

    /**
     * Sets the datetime at which to interpret the time zone
     * for display name lookup.
     *
     * Notes:
     *
     * - If not set, the formatting datetime is used if possible.
     * - If the offset is not set, the datetime is interpreted as UTC.
     * - The constraints are the same as with `ZoneNameTimestamp` in Rust.
     * - Set to year 1000 or 9999 for a reference far in the past or future.
     *
     * See the [Rust documentation for `at_date_time`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html#method.at_date_time) for more information.
     *
     * Additional information: [1](https://docs.rs/icu/2.2.0/icu/time/zone/struct.ZoneNameTimestamp.html)
     */
    atDateTime(date: Date, time: Time): TimeZoneInfo;

    /**
     * Sets the timestamp, in milliseconds since Unix epoch, at which to interpret the time zone
     * for display name lookup.
     *
     * Notes:
     *
     * - If not set, the formatting datetime is used if possible.
     * - The constraints are the same as with `ZoneNameTimestamp` in Rust.
     *
     * See the [Rust documentation for `with_zone_name_timestamp`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html#method.with_zone_name_timestamp) for more information.
     *
     * Additional information: [1](https://docs.rs/icu/2.2.0/icu/time/zone/struct.ZoneNameTimestamp.html#method.from_epoch_seconds)
     */
    atTimestamp(timestamp: bigint): TimeZoneInfo;

    /**
     * Returns the `DateTime` for the UTC zone name reference time
     *
     * See the [Rust documentation for `zone_name_timestamp`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html#method.zone_name_timestamp) for more information.
     */
    get zoneNameDateTime(): IsoDateTime | null;

    /**
     * See the [Rust documentation for `with_variant`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html#method.with_variant) for more information.
     *
     * @deprecated returns unmodified copy
     */
    withVariant(timeVariant: TimeZoneVariant): TimeZoneInfo;

    /**
     * See the [Rust documentation for `offset`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html#method.offset) for more information.
     */
    get offset(): UtcOffset | null;

    /**
     * See the [Rust documentation for `infer_variant`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html#method.infer_variant) for more information.
     *
     * Additional information: [1](https://docs.rs/icu/2.2.0/icu/time/zone/enum.TimeZoneVariant.html)
     *
     * @deprecated does nothing
     */
    inferVariant(offsetCalculator: VariantOffsetsCalculator): boolean;

    /**
     * See the [Rust documentation for `variant`](https://docs.rs/icu/2.2.0/icu/time/struct.TimeZoneInfo.html#method.variant) for more information.
     *
     * @deprecated always returns null
     */
    variant(): TimeZoneVariant | null;

    /**
     * Creates a time zone info from parts.
     *
     * `variant` is ignored.
     */
    constructor(id: TimeZone, offset: UtcOffset | null, variant: TimeZoneVariant | null);
}