import type { Nullable, Optional } from '@/types';
import type { ReduceForPageQuery, ReduceForSaveVO, ReduceForUpdateVO } from '../../schema';
import type { NdmAlarmHost } from './alarm';
import type { NdmSecurityBox, NdmSwitch } from './other';
import type { NdmNvr } from './storage';
import type { NdmCamera, NdmDecoder, NdmKeyboard, NdmMediaServer, NdmVideoServer } from './video';

export type NdmDevice = NdmAlarmHost | NdmCamera | NdmDecoder | NdmKeyboard | NdmMediaServer | NdmNvr | NdmSecurityBox | NdmSwitch | NdmVideoServer;
export type NdmDeviceResultVO = Nullable<NdmDevice>;
export type NdmDeviceSaveVO = Partial<Omit<NdmDevice, ReduceForSaveVO>>;
export type NdmDeviceUpdateVO = Optional<Omit<NdmDevice, ReduceForUpdateVO>>;
export type NdmDevicePageQuery = Partial<Omit<NdmDevice, ReduceForPageQuery>>;

export type NdmServer = NdmMediaServer | NdmVideoServer;
export type NdmServerResultVO = Nullable<NdmServer>;
export type NdmServerSaveVO = Partial<Omit<NdmServer, ReduceForSaveVO>>;
export type NdmServerUpdateVO = Optional<Omit<NdmServer, ReduceForUpdateVO>>;
export type NdmServerPageQuery = Partial<Omit<NdmServer, ReduceForPageQuery>>;

export * from './alarm';
export * from './icmp';
export * from './log';
export * from './other';
export * from './storage';
export * from './upper-ndm';
export * from './video';
