import { JsPbMessage, Unregisterable } from '../shared';
import { EUpdaterState } from '../Updates';

export interface Dock {
	DisarmSafetyNet(): void;

	/**
	 * If `data` is deserialized, returns {@link MsgSystemDockState}.
	 * @returns an object that can be used to unregister the callback.
	 */
	RegisterForStateChanges(callback: (data: ArrayBuffer) => void): Unregisterable;

	/**
	 * @param base64 Serialized base64 message from `CMsgSystemDockUpdateFirmware`.
	 */
	UpdateFirmware(base64: string): any;
}

/**
 * CMsgSystemDockState
 */
export interface MsgSystemDockState extends JsPbMessage {
	update_state(): SystemDockUpdateState | undefined;
}

export interface SystemDockUpdateState {
	state: EUpdaterState | undefined;
	rtime_last_checked: number | undefined;
	version_current: string | undefined;
	version_available: string | undefined;
	stage_progress: number | undefined;
	rtime_estimated_completion: number | undefined;
	old_fw_workaround: number | undefined;
}
