import type { Waveform, MultiZoneApplicationRequest, MultiZoneEffectType, MultiZoneExtendedApplicationRequest, TileEffectType, TileEffectSkyType } from './constants/index.js';
export interface Color {
    hue: number;
    saturation: number;
    brightness: number;
    kelvin: number;
}
export interface OffsetRef {
    current: number;
}
export type Header = ReturnType<typeof decodeHeader>;
export type StateService = ReturnType<typeof decodeStateService>;
export type StateHostFirmware = ReturnType<typeof decodeStateHostFirmware>;
export type StateWifiInfo = ReturnType<typeof decodeStateWifiInfo>;
export type StateWifiFirmware = ReturnType<typeof decodeStateWifiFirmware>;
export type StateVersion = ReturnType<typeof decodeStateVersion>;
export type StateInfo = ReturnType<typeof decodeStateInfo>;
export type StateLocation = ReturnType<typeof decodeStateLocation>;
export type StateGroup = ReturnType<typeof decodeStateGroup>;
export type SetColor = ReturnType<typeof decodeSetColor>;
export type LightState = ReturnType<typeof decodeLightState>;
export type StateHevCycle = ReturnType<typeof decodeStateHevCycle>;
export type StateHevCycleConfiguration = ReturnType<typeof decodeStateHevCycleConfiguration>;
export type StateRPower = ReturnType<typeof decodeStateRPower>;
export type StateDeviceChain = ReturnType<typeof decodeStateDeviceChain>;
export type DeviceChainDevice = StateDeviceChain['devices'][0];
export type State64 = ReturnType<typeof decodeState64>;
export type StateZone = ReturnType<typeof decodeStateZone>;
export type StateMultiZone = ReturnType<typeof decodeStateMultiZone>;
export type StateMultiZoneEffect = ReturnType<typeof decodeStateMultiZoneEffect>;
export type StateExtendedColorZones = ReturnType<typeof decodeStateExtendedColorZones>;
export type StateTileEffect = ReturnType<typeof decodeStateTileEffect>;
export type SensorStateAmbientLight = ReturnType<typeof decodeSensorStateAmbientLight>;
/**
 * Encodes a LIFX protocol message into a binary format.
 *
 * This is the core encoding function that creates properly formatted LIFX LAN protocol messages.
 * The encoding follows the official LIFX protocol specification with optimized binary operations.
 */
export declare function encode(tagged: boolean, source: number, target: Uint8Array, resRequired: boolean, ackRequired: boolean, sequence: number, type: number, payload?: Uint8Array): Uint8Array;
/**
 * Encodes a UUID string directly into a byte array at the specified offset.
 *
 * Efficiently converts UUID format (e.g., "550e8400-e29b-41d4-a716-446655440000")
 * into 16 bytes at the target location. Optimized for minimal string allocations.
 */
export declare function encodeUuidTo(bytes: Uint8Array, offset: number, uuid: string): void;
export declare function encodeStringTo(bytes: Uint8Array, offset: number, value: string, byteLength: number): void;
export declare function encodeString(value: string, byteLength: number): Uint8Array;
export declare function encodeTimestampTo(view: DataView, offset: number, date: Date): void;
export declare function decodeStateService(bytes: Uint8Array, offsetRef: OffsetRef): {
    service: number;
    port: number;
};
export declare function decodeStateHostFirmware(bytes: Uint8Array, offsetRef: OffsetRef): {
    build: Date;
    reserved: Uint8Array<ArrayBufferLike>;
    version_minor: number;
    version_major: number;
};
export declare function decodeStateWifiInfo(bytes: Uint8Array, offsetRef: OffsetRef): {
    signal: number;
    reserved6: Uint8Array<ArrayBufferLike>;
    reserved7: Uint8Array<ArrayBufferLike>;
    reserved8: Uint8Array<ArrayBufferLike>;
};
export declare function decodeStateWifiFirmware(bytes: Uint8Array, offsetRef: OffsetRef): {
    build: Date;
    reserved6: Uint8Array<ArrayBufferLike>;
    version_minor: number;
    version_major: number;
};
export declare function decodeStatePower(bytes: Uint8Array, offsetRef: OffsetRef): number;
export declare function decodeStateLabel(bytes: Uint8Array, offsetRef: OffsetRef): string;
export declare function decodeStateVersion(bytes: Uint8Array, offsetRef: OffsetRef): {
    vendor: number;
    product: number;
};
export declare function decodeStateInfo(bytes: Uint8Array, offsetRef: OffsetRef): {
    time: Date;
    uptime: Date;
    downtime: Date;
};
export declare function decodeStateLocation(bytes: Uint8Array, offsetRef: OffsetRef): {
    location: Uint8Array<ArrayBufferLike>;
    label: string;
    updated_at: Date;
};
export declare function decodeStateGroup(bytes: Uint8Array, offsetRef: OffsetRef): {
    group: string;
    label: string;
    updated_at: Date;
};
export declare function decodeEchoResponse(bytes: Uint8Array, offsetRef: OffsetRef): Uint8Array;
export declare function decodeStateUnhandled(bytes: Uint8Array, offsetRef: OffsetRef): number;
export declare function decodeSetColor(bytes: Uint8Array, offsetRef: OffsetRef): {
    reserved: Uint8Array<ArrayBufferLike>;
    hue: number;
    saturation: number;
    brightness: number;
    kelvin: number;
    duration: number;
};
export declare function encodeSetColor(hue: number, saturation: number, brightness: number, kelvin: number, duration: number): Uint8Array;
export declare function encodeSetPower(power: number | boolean): Uint8Array;
export declare function encodeSetLocation(location: Uint8Array | string, label: string, updatedAt: Date): Uint8Array;
export declare function encodeSetGroup(group: Uint8Array | string, label: string, updatedAt: Date): Uint8Array;
export declare function encodeEchoRequest(echoing: Uint8Array): Uint8Array;
export declare function encodeSetWaveform(transient: boolean, hue: number, saturation: number, brightness: number, kelvin: number, period: number, cycles: number, skewRatio: number, waveform: Waveform): Uint8Array;
export declare function encodeSetLightPower(level: number | boolean, duration: number): Uint8Array;
export declare function encodeSetWaveformOptional(transient: boolean, hue: number, saturation: number, brightness: number, kelvin: number, period: number, cycles: number, skewRatio: number, waveform: Waveform, setHue: boolean, setSaturation: boolean, setBrightness: boolean, setKelvin: boolean): Uint8Array;
export declare function encodeSetInfrared(brightness: number): Uint8Array;
export declare function encodeSetHevCycle(enable: boolean, durationSeconds: number): Uint8Array;
export declare function encodeSetHevCycleConfiguration(indication: boolean, durationSeconds: number): Uint8Array;
export declare function encodeGetRPower(relayIndex: number): Uint8Array;
export declare function encodeSetRPower(relayIndex: number, level: number): Uint8Array;
export declare function encodeGet64(tileIndex: number, length: number, x: number, y: number, width: number): Uint8Array;
export declare function encodeGetColorZones(startIndex: number, endIndex: number): Uint8Array;
export declare function encodeSetColorZones(startIndex: number, endIndex: number, hue: number, saturation: number, brightness: number, kelvin: number, duration: number, apply: MultiZoneApplicationRequest): Uint8Array;
export declare function encodeSetMultiZoneEffect(instanceid: number, effectType: MultiZoneEffectType, speed: number, duration: bigint, parameters: Uint8Array): Uint8Array;
export declare function encodeSetExtendedColorZones(duration: number, apply: MultiZoneExtendedApplicationRequest, zoneIndex: number, colorsCount: number, colors: Color[]): Uint8Array;
export declare function encodeSetUserPosition(tileIndex: number, userX: number, userY: number): Uint8Array;
export declare function encodeSet64(tileIndex: number, length: number, x: number, y: number, width: number, duration: number, colors: Color[]): Uint8Array;
export declare function encodeGetTileEffect(): Uint8Array;
export declare function encodeSetTileEffect(instanceid: number, effectType: TileEffectType, speed: number, duration: bigint, skyType: TileEffectSkyType, cloudSaturationMin: number, paletteCount: number, palette: Color[]): Uint8Array;
export declare function decodeLightState(bytes: Uint8Array, offsetRef: OffsetRef): {
    hue: number;
    saturation: number;
    brightness: number;
    kelvin: number;
    power: number;
    label: string;
    reserved2: Uint8Array<ArrayBufferLike>;
    reserved8: Uint8Array<ArrayBufferLike>;
};
export declare function decodeStateLightPower(bytes: Uint8Array, offsetRef: OffsetRef): number;
export declare function decodeStateInfrared(bytes: Uint8Array, offsetRef: OffsetRef): number;
export declare function decodeStateHevCycle(bytes: Uint8Array, offsetRef: OffsetRef): {
    duration_s: number;
    remaining_s: number;
    last_power: boolean;
};
export declare function decodeStateHevCycleConfiguration(bytes: Uint8Array, offsetRef: OffsetRef): {
    indication: number;
    duration_s: number;
};
export declare function decodeStateLastHevCycleResult(bytes: Uint8Array, offsetRef: OffsetRef): number;
export declare function decodeStateRPower(bytes: Uint8Array, offsetRef: OffsetRef): {
    relay_index: number;
    level: number;
};
export declare function decodeStateDeviceChain(bytes: Uint8Array, offsetRef: OffsetRef): {
    start_index: number;
    devices: {
        accel_meas_x: number;
        accel_meas_y: number;
        accel_meas_z: number;
        reserved6: Uint8Array;
        user_x: number;
        user_y: number;
        width: number;
        height: number;
        reserved7: Uint8Array;
        device_version_vendor: number;
        device_version_product: number;
        reserved8: Uint8Array;
        firmware_build: Date;
        reserved9: Uint8Array;
        firmware_version_minor: number;
        firmware_version_major: number;
        reserved10: Uint8Array;
    }[];
    tile_devices_count: number;
};
export declare function decodeState64(bytes: Uint8Array, offsetRef: OffsetRef): {
    tile_index: number;
    reserved6: Uint8Array<ArrayBufferLike>;
    x: number;
    y: number;
    width: number;
    colors: Color[];
};
export declare function decodeStateZone(bytes: Uint8Array, offsetRef: OffsetRef): {
    zones_count: number;
    zone_index: number;
    hue: number;
    saturation: number;
    brightness: number;
    kelvin: number;
};
export declare function decodeStateMultiZone(bytes: Uint8Array, offsetRef: OffsetRef): {
    zones_count: number;
    zone_index: number;
    colors: Color[];
};
export declare function decodeStateMultiZoneEffect(bytes: Uint8Array, offsetRef: OffsetRef): {
    instanceid: number;
    type: number;
    reserved6: Uint8Array<ArrayBufferLike>;
    speed: number;
    duration: bigint;
    reserved7: Uint8Array<ArrayBufferLike>;
    reserved8: Uint8Array<ArrayBufferLike>;
    parameters: Uint8Array<ArrayBufferLike>;
};
export declare function decodeStateExtendedColorZones(bytes: Uint8Array, offsetRef: OffsetRef): {
    zones_count: number;
    zone_index: number;
    colors_count: number;
    colors: Color[];
};
export declare function decodeStateTileEffect(bytes: Uint8Array, offsetRef: OffsetRef): {
    reserved0: number;
    instanceid: number;
    type: number;
    speed: number;
    duration: bigint;
    reserved1: Uint8Array<ArrayBufferLike>;
    reserved2: Uint8Array<ArrayBufferLike>;
    skyType: number;
    reserved3: Uint8Array<ArrayBufferLike>;
    cloudSaturationMin: number;
    reserved4: Uint8Array<ArrayBufferLike>;
    cloudSaturationMax: number;
    reserved5: Uint8Array<ArrayBufferLike>;
    palette_count: number;
    palette: Color[];
};
export declare function decodeSensorStateAmbientLight(bytes: Uint8Array, offsetRef: OffsetRef): {
    lux: number;
};
export declare const getHeaderSize: (view: DataView, offset?: number) => number;
export declare const getHeaderFlags: (view: DataView, offset?: number) => number;
export declare const getHeaderTagged: (view: DataView, offset?: number) => boolean;
export declare const getHeaderSource: (view: DataView, offset?: number) => number;
export declare const getHeaderTarget: (bytes: Uint8Array, offset?: number) => Uint8Array;
export declare const getHeaderResponseFlags: (view: DataView, offset?: number) => number;
export declare const getHeaderResponseRequired: (responseFlags: number) => boolean;
export declare const getHeaderAcknowledgeRequired: (responseFlags: number) => boolean;
export declare const getHeaderType: (view: DataView, offset?: number) => number;
export declare const getHeaderSequence: (view: DataView, offset?: number) => number;
export declare const getPayload: (bytes: Uint8Array, offset?: number) => Uint8Array;
export declare function decodeHeader(bytes: Uint8Array, offset?: number): {
    bytes: Uint8Array<ArrayBufferLike>;
    size: number;
    protocol: number;
    addressable: boolean;
    tagged: boolean;
    origin: number;
    source: number;
    target: Uint8Array<ArrayBufferLike>;
    reserved1: Uint8Array<ArrayBufferLike>;
    reserved2: Uint8Array<ArrayBufferLike>;
    res_required: boolean;
    ack_required: boolean;
    reserved3: number;
    reserved4: Uint8Array<ArrayBufferLike>;
    sequence: number;
    reserved5: Uint8Array<ArrayBufferLike>;
    type: number;
};
//# sourceMappingURL=encoding.d.ts.map