import { Dispatch } from 'react';
import { DpsResult, Result } from './Result';
import { DevInfo, DpValue } from 'tuya-panel-kit';
import { PropertyValueTypes } from '../../utils/TypeUtils';
export interface NativeProps {
    familyName: string;
    role: 0 | 1 | 2 | 3;
    deviceInfo: DeviceInfo;
    uaGroupInfo: UAGroupInfo;
    timeSchedule?: boolean;
    energieverbrauch?: object;
    moods: any[];
    groupDevices: any[];
}
export interface DeviceInfo {
    devId: string;
    pId: string;
    dps: any;
}
export interface UAGroupInfo {
    tyGroupId: number;
    pId: string;
    dps: any;
    config: any;
}
declare type AsyncBlockType<T> = () => Promise<DpsResult<T>>;
declare type SyncBlockType<T> = () => DpsResult<T>;
declare function asyncSetDps<T>(dispatch: Dispatch<any>, block: AsyncBlockType<T> | SyncBlockType<T>): Promise<Result<T>>;
declare function simpleSetDps<T>(dispatch: Dispatch<any>): (deviceId: string, dps: any) => Promise<Result<T>>;
declare function simpleSetDp<T>(dispatch: Dispatch<any>): (deviceId: string, dp: string, value: any) => Promise<Result<T>>;
declare const useDeviceId: () => string;
declare const useFamilyName: () => string;
declare const useRole: () => 0 | 1 | 2 | 3;
declare function useDp<T, R extends any>(dp: string): [T, (value: T) => Promise<Result<R>>];
declare function useScaledDp<R extends any>(dp: string, scaled?: number): [number, (value: number) => Promise<Result<R>>];
declare function useDps<R>(): [any, (dps: any) => Promise<Result<R>>];
interface DpState {
    switch: boolean;
    [dpCode: string]: DpValue;
}
declare const useDeviceInfo: () => DevInfo<DpState>;
declare const useTimeSchedule: () => [v: boolean | undefined, f: any];
declare const useMoods: () => [any[], (v: any[]) => void];
declare const useGroupDevices: () => [any[], (v: any[]) => void];
declare const useEnergieverbrauch: () => (object | undefined)[];
export declare const useEngergyGeneration: () => boolean;
export declare function useUAGroupInfo(): UAGroupInfo;
export declare function useGroupConfig<T>(): [T, (dps: any, newConfig: T) => Promise<Result<any>>];
/**
 * @template GC GroupConfig
 * @template GCPT GroupConfigPropertyType
 * @param key
 * @param dpKey
 */
export declare function useGroupConfigFeature<GC, GCPT extends PropertyValueTypes<GC>>(key: keyof GC, dpKey?: string): [GCPT | undefined, (value: GCPT, dpValue: any, extraDps?: any, extraConfig?: any) => Promise<Result<any>>];
export declare function useFeatureHook<GC, T extends PropertyValueTypes<GC>>(featureKey: keyof GC, defValue: T, valueMapToDpValue?: (v: T) => any, getExtraDps?: (v: T) => any, getExtraConfig?: (v: T) => any): [T, (value: T) => Promise<Result<any>>];
export declare const useFanMaxSpeed: () => 3 | 20;
export declare const isUVCFanDevice: () => boolean;
export declare const ldvModules: import("@reduxjs/toolkit").Reducer<NativeProps, import("@reduxjs/toolkit").AnyAction>;
export declare const setNativeProps: import("@reduxjs/toolkit").ActionCreatorWithPayload<NativeProps, string>, setGroupNativeProps: import("@reduxjs/toolkit").ActionCreatorWithPayload<NativeProps, string>, setDps: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>, setTimeSchedule: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>, setMoods: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>, setGroupDevices: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>, setEnergieverbrauch: import("@reduxjs/toolkit").ActionCreatorWithPayload<any, string>;
export { asyncSetDps, simpleSetDps, simpleSetDp, useDeviceId, useDeviceInfo, useDp, useScaledDp, useDps, useFamilyName, useRole, useTimeSchedule, useMoods, useGroupDevices, useEnergieverbrauch, };
