import type { OptionallyStatefulCommandEntityDiscovery } from "./BaseEntityDiscovery.ts";

/**
 * @see https://www.home-assistant.io/integrations/number/#device-class
 */
export type NumberDeviceClass = 
'None' | 'apparent_power' | 'aqi' | 'atmospheric_pressure' | 'battery' | 'carbon_dioxide' | 'carbon_monoxide' | 
'current' | 'data_rate' | 'data_size' | 'distance' | 'energy' | 'energy_storage' | 'frequency' | 'gas' | 'humidity' |
'illuminance' | 'irradiance'  | 'moisture' | 'nitrogen_dioxide' | 'nitrogen_monoxide' | 'nitrous_oxide' | 'ozone' |
'ph' | 'pm1' | 'pm10' | 'pm25' | 'power' | 'power_factor' | 'pressure' | 'precipitation' | 'precipitation_intensity' |
'reactive_power' | 'signal_strength' | 'sound_pressure' | 'speed' | 'sulfur_dioxide' | 'temperature' | 'volatile_organic_compounds' |
'voltage' | 'volume' | 'volume_storage' | 'water' | 'weight' | 'wind_speed';

/**
 * @see https://www.home-assistant.io/integrations/number.mqtt/#configuration-variables
 */
export interface NumberDiscovery extends OptionallyStatefulCommandEntityDiscovery {
    device_class?: NumberDeviceClass;

    /**
     * The minimum value.
     * @defaultValue 1
     */
    min?: number;

    /**
     * The maximum value.
     * @defaultValue 100
     */
    max?: number;

    /**
     * Control how the slider will be rendered.
     * @defaultValue 'auto'
     */
    mode?: 'slider' | 'box' | 'auto';

    /**
     * Flag that defines if the number works in optimistic mode.
     */
    optimistic?: boolean;

    /**
     * A special payload that resets the state to `unknown` when received on `state_topic`.
     */
    payload_reset?: string;

    /**
     * Step value. Smallest value is 0.001.
     * @defaultValue 1
     */
    step: number;

    /**
     * Defines unit of measurement of the sensor, if any.
     */
    unit_of_measurement?: string;
}