/**
 * Response parser function type
 * Takes a string response and returns a parsed value of type T
 */
export type ResponseParser<T = any> = (response: string) => T;

/**
 * Command types used to determine default parsing behavior
 */
export enum CommandType {
    READ = 'read',
    CONTROL = 'control',
    SET = 'set'
}

/**
 * Battery response (numeric percentage 0-100)
 */
export interface BatteryResponse {
    value: number;
}

/**
 * Height response (numeric value in decimeters)
 */
export interface HeightResponse {
    value: number;
    unit: 'dm';
}

/**
 * Temperature response (min and max values in Celsius)
 */
export interface TemperatureResponse {
    min: number;
    max: number;
    unit: '°C';
}

/**
 * Speed response (numeric value in cm/s)
 */
export interface SpeedResponse {
    value: number;
    unit: 'cm/s';
}

/**
 * Time response (flight time in seconds)
 */
export interface TimeResponse {
    value: number;
    unit: 's';
}

/**
 * WiFi signal strength response (percentage 0-100)
 */
export interface WifiResponse {
    value: number;
    unit: '%';
}

/**
 * Attitude response (orientation in degrees)
 */
export interface AttitudeResponse {
    pitch: number;
    roll: number;
    yaw: number;
    unit: '°';
}

/**
 * Barometer response (altitude in meters)
 */
export interface BarometerResponse {
    value: number;
    unit: 'm';
}

/**
 * Acceleration response (in mG)
 */
export interface AccelerationResponse {
    x: number;
    y: number;
    z: number;
    unit: 'mG';
}

/**
 * Time-of-Flight response (distance in mm)
 */
export interface TofResponse {
    value: number;
    unit: 'mm';
}

/**
 * Union type of all possible response data types
 */
export type ResponseData = 
    | BatteryResponse
    | HeightResponse
    | TemperatureResponse
    | SpeedResponse
    | TimeResponse
    | WifiResponse
    | AttitudeResponse
    | BarometerResponse
    | AccelerationResponse
    | TofResponse
    | boolean
    | string; 