import { device } from '@synnaxlabs/client';
import { record } from '@synnaxlabs/x';
import { z } from 'zod';
import { Flux } from '../flux';
import { Rack } from '../rack';
import { Status } from '../status';
import { Task } from '../task';
export declare const FLUX_STORE_KEY = "devices";
export interface FluxStore extends Flux.UnaryStore<string, Omit<device.Device, "status">> {
}
export interface FluxSubStore extends Task.FluxSubStore {
    [FLUX_STORE_KEY]: FluxStore;
    [Rack.FLUX_STORE_KEY]: Rack.FluxStore;
    [Status.FLUX_STORE_KEY]: Status.FluxStore;
}
export declare const FLUX_STORE_CONFIG: Flux.UnaryStoreConfig<FluxSubStore>;
export declare const useSetSynchronizer: (onSet: (device: device.Device) => void) => void;
export interface RetrieveQuery extends device.RetrieveSingleParams {
}
export declare const retrieveSingle: <Properties extends z.ZodType<record.Unknown> = typeof record.unknownZ, Make extends z.ZodType<string> = z.ZodString, Model extends z.ZodType<string> = z.ZodString>({ client, store, query, schemas, }: Flux.RetrieveParams<RetrieveQuery, FluxSubStore> & {
    schemas?: device.DeviceSchemas<Properties, Make, Model>;
}) => Promise<device.Device<Properties, Make, Model>>;
export interface RetrieveMultipleQuery {
    keys: device.Key[];
}
export declare const retrieveMultiple: <Properties extends z.ZodType<record.Unknown> = typeof record.unknownZ, Make extends z.ZodType<string> = z.ZodString, Model extends z.ZodType<string> = z.ZodString>({ client, store, query: { keys }, schemas, }: Flux.RetrieveParams<RetrieveMultipleQuery, FluxSubStore> & {
    schemas?: device.DeviceSchemas<Properties, Make, Model>;
}) => Promise<device.Device<Properties, Make, Model>[]>;
export declare const createRetrieve: <Properties extends z.ZodType<record.Unknown> = typeof record.unknownZ, Make extends z.ZodType<string> = z.ZodString, Model extends z.ZodType<string> = z.ZodString>(schemas?: device.DeviceSchemas<Properties, Make, Model>) => Flux.CreateRetrieveReturn<RetrieveQuery, device.Device<Properties, Make, Model>>;
export declare const useRetrieve: Flux.UseRetrieve<RetrieveQuery, device.Device<z.ZodRecord<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodUnknown>, z.ZodString, z.ZodString>>, useStatefulRetrieve: Flux.UseRetrieveStateful<RetrieveQuery, device.Device<z.ZodRecord<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodUnknown>, z.ZodString, z.ZodString>>, useRetrieveEffect: Flux.UseRetrieveEffect<RetrieveQuery, device.Device<z.ZodRecord<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodUnknown>, z.ZodString, z.ZodString>>;
export interface ListParams extends device.RetrieveMultipleParams {
}
export declare const useList: Flux.UseList<ListParams, string, device.Device<z.ZodRecord<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodUnknown>, z.ZodString, z.ZodString>>;
export type UseDeleteArgs = device.Key | device.Key[];
export declare const useDelete: Flux.UseUpdate<UseDeleteArgs, UseDeleteArgs, z.ZodNever, false, FluxSubStore>;
export declare const useCreate: Flux.UseUpdate<device.New<z.ZodRecord<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodUnknown>, z.ZodString, z.ZodString>, device.Device<z.ZodRecord<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>, z.ZodUnknown>, z.ZodString, z.ZodString>, z.ZodNever, false, FluxSubStore>;
export interface UseRetrieveGroupArgs {
}
export declare const useRetrieveGroupID: Flux.UseRetrieve<UseRetrieveGroupArgs, {
    type: "label" | "log" | "builtin" | "cluster" | "channel" | "node" | "group" | "range" | "framer" | "range-alias" | "user" | "workspace" | "schematic" | "lineplot" | "rack" | "device" | "task" | "policy" | "role" | "table" | "arc" | "schematic_symbol" | "status" | "view";
    key: string;
} | {
    type: "node" | "view" | "label" | "table" | "range" | "group" | "log" | "status" | "role" | "cluster" | "schematic" | "channel" | "workspace" | "user" | "policy" | "task" | "device" | "rack" | "arc" | "builtin" | "framer" | "range-alias" | "lineplot" | "schematic_symbol";
    key: string;
} | undefined>;
export interface RenameParams extends Pick<device.Device, "key" | "name"> {
}
export declare const useRename: Flux.UseUpdate<RenameParams, RenameParams, z.ZodNever, false, FluxSubStore>;
export declare const formSchema: z.ZodObject<{
    key: z.ZodString;
    rack: z.ZodUInt32;
    name: z.ZodString;
    make: z.ZodString;
    model: z.ZodString;
    location: z.ZodString;
    configured: z.ZodOptional<z.ZodBoolean>;
    properties: z.ZodType<record.Unknown, unknown, z.core.$ZodTypeInternals<record.Unknown, unknown>>;
    status: z.ZodOptional<z.ZodPipe<z.ZodNullable<z.ZodType<{
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    }, {
        key: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: string | number | bigint | Date | import('@synnaxlabs/x').TimeSpan | import('@synnaxlabs/x').TimeStamp | [number, number, number] | [number, number] | [number] | {
            value: bigint;
        };
        details: {
            rack: number;
            device: string;
        };
        name?: string | undefined;
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: string | [number, number, number, number] | [number, number, number] | {
                rgba255: [number, number, number, number];
            } | {
                r: number;
                g: number;
                b: number;
                a: number;
            };
        }[] | null | undefined;
    }, z.core.$ZodTypeInternals<{
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    }, {
        key: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: string | number | bigint | Date | import('@synnaxlabs/x').TimeSpan | import('@synnaxlabs/x').TimeStamp | [number, number, number] | [number, number] | [number] | {
            value: bigint;
        };
        details: {
            rack: number;
            device: string;
        };
        name?: string | undefined;
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: string | [number, number, number, number] | [number, number, number] | {
                rgba255: [number, number, number, number];
            } | {
                r: number;
                g: number;
                b: number;
                a: number;
            };
        }[] | null | undefined;
    }>>>, z.ZodTransform<{
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    } | undefined, {
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    } | null>>>;
}, z.core.$strip>;
export interface FormQuery extends RetrieveQuery {
}
export declare const createForm: <Properties extends z.ZodType<record.Unknown> = typeof record.unknownZ, Make extends z.ZodType<string> = z.ZodString, Model extends z.ZodType<string> = z.ZodString>(schemas?: device.DeviceSchemas<Properties, Make, Model>) => Flux.UseForm<FormQuery, z.ZodObject<{
    key: z.ZodString;
    rack: z.ZodUInt32;
    name: z.ZodString;
    make: z.ZodString;
    model: z.ZodString;
    location: z.ZodString;
    configured: z.ZodOptional<z.ZodBoolean>;
    properties: z.ZodType<record.Unknown, unknown, z.core.$ZodTypeInternals<record.Unknown, unknown>>;
    status: z.ZodOptional<z.ZodPipe<z.ZodNullable<z.ZodType<{
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    }, {
        key: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: string | number | bigint | Date | import('@synnaxlabs/x').TimeSpan | import('@synnaxlabs/x').TimeStamp | [number, number, number] | [number, number] | [number] | {
            value: bigint;
        };
        details: {
            rack: number;
            device: string;
        };
        name?: string | undefined;
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: string | [number, number, number, number] | [number, number, number] | {
                rgba255: [number, number, number, number];
            } | {
                r: number;
                g: number;
                b: number;
                a: number;
            };
        }[] | null | undefined;
    }, z.core.$ZodTypeInternals<{
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    }, {
        key: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: string | number | bigint | Date | import('@synnaxlabs/x').TimeSpan | import('@synnaxlabs/x').TimeStamp | [number, number, number] | [number, number] | [number] | {
            value: bigint;
        };
        details: {
            rack: number;
            device: string;
        };
        name?: string | undefined;
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: string | [number, number, number, number] | [number, number, number] | {
                rgba255: [number, number, number, number];
            } | {
                r: number;
                g: number;
                b: number;
                a: number;
            };
        }[] | null | undefined;
    }>>>, z.ZodTransform<{
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    } | undefined, {
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    } | null>>>;
}, z.core.$strip>, FluxSubStore>;
export declare const useForm: Flux.UseForm<FormQuery, z.ZodObject<{
    key: z.ZodString;
    rack: z.ZodUInt32;
    name: z.ZodString;
    make: z.ZodString;
    model: z.ZodString;
    location: z.ZodString;
    configured: z.ZodOptional<z.ZodBoolean>;
    properties: z.ZodType<record.Unknown, unknown, z.core.$ZodTypeInternals<record.Unknown, unknown>>;
    status: z.ZodOptional<z.ZodPipe<z.ZodNullable<z.ZodType<{
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    }, {
        key: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: string | number | bigint | Date | import('@synnaxlabs/x').TimeSpan | import('@synnaxlabs/x').TimeStamp | [number, number, number] | [number, number] | [number] | {
            value: bigint;
        };
        details: {
            rack: number;
            device: string;
        };
        name?: string | undefined;
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: string | [number, number, number, number] | [number, number, number] | {
                rgba255: [number, number, number, number];
            } | {
                r: number;
                g: number;
                b: number;
                a: number;
            };
        }[] | null | undefined;
    }, z.core.$ZodTypeInternals<{
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    }, {
        key: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: string | number | bigint | Date | import('@synnaxlabs/x').TimeSpan | import('@synnaxlabs/x').TimeStamp | [number, number, number] | [number, number] | [number] | {
            value: bigint;
        };
        details: {
            rack: number;
            device: string;
        };
        name?: string | undefined;
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: string | [number, number, number, number] | [number, number, number] | {
                rgba255: [number, number, number, number];
            } | {
                r: number;
                g: number;
                b: number;
                a: number;
            };
        }[] | null | undefined;
    }>>>, z.ZodTransform<{
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    } | undefined, {
        key: string;
        name: string;
        variant: "error" | "success" | "info" | "warning" | "loading" | "disabled";
        message: string;
        time: import('@synnaxlabs/x').TimeStamp;
        details: {
            rack: number;
            device: string;
        };
        description?: string | undefined;
        labels?: {
            key: string;
            name: string;
            color: [number, number, number, number];
        }[] | undefined;
    } | null>>>;
}, z.core.$strip>, FluxSubStore>;
//# sourceMappingURL=queries.d.ts.map