//                           UNCLASSIFIED
/*-------------------------------------------------------------------------
RAYTHEON PROPRIETARY: THIS DOCUMENT CONTAINS DATA OR INFORMATION
PROPRIETARY TO RAYTHEON COMPANY AND IS RESTRICTED TO USE ONLY BY PERSONS
AUTHORIZED BY RAYTHEON COMPANY IN WRITING TO USE IT. DISCLOSURE TO
UNAUTHORIZED PERSONS WOULD LIKELY CAUSE SUBSTANTIAL COMPETITIVE HARM TO
RAYTHEON COMPANY'S BUSINESS POSITION. NEITHER SAID DOCUMENT NOR ITS
CONTENTS SHALL BE FURNISHED OR DISCLOSED TO OR COPIED OR USED BY PERSONS
OUTSIDE RAYTHEON COMPANY WITHOUT THE EXPRESS WRITTEN APPROVAL OF RAYTHEON
COMPANY.

THIS PROPRIETARY NOTICE IS NOT APPLICABLE IF DELIVERED TO THE U.S.
GOVERNMENT.

UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
-------------------------------------------------------------------------*/

using Raytheon.Communication;
using System;
using System.Runtime.Serialization;

namespace Raytheon.Instruments
{
	/// <summary>
	/// the format saving video
	/// </summary>
	[DataContract]
	public enum VideoSaveFormat : uint
	{
		[EnumMember]
		BIN,
		[EnumMember]
		NCDF
	};

	/// <summary>
	/// MOVE - rename the file or change the path on the local system
	/// COPY_AND_DELETE - Copy the file and delete the original
	/// </summary>
	[DataContract]
	public enum MoveControl : uint
	{
		[EnumMember]
		MOVE,
		[EnumMember]
		COPY_AND_DELETE
	};


	/// <summary>
	/// An interface for video recording implementations.
	/// </summary>
	[UmsContract]
	public interface IVideoRecorder : IInstrument
	{
		[UmsCommand("IVideoRecorder.AddNcdfAttributes")]
		void AddNcdfAttributes(string videoFile, string attributeFile);

		[UmsCommand("IVideoRecorder.Connect")]
		void Connect();

		[UmsCommand("IVideoRecorder.Disconnect")]
		void Disconnect();

		[UmsCommand("IVideoRecorder.GrabVideoToDisk")]
		void GrabVideoToDisk(uint numberOfFrames, VideoSaveFormat format);

		[UmsCommand("IVideoRecorder.")]
		void MoveFile(string fromFile, string toFile, MoveControl control);

		[UmsCommand("IVideoRecorder.QueryHardDrive")]
		void QueryHardDrive(ref float driveSpace1, ref float driveSpace2, ref float driveSpace3, ref float driveSpace4);

		[UmsCommand("IVideoRecorder.ShowLiveVideo")]
		void ShowLiveVideo();

		[UmsCommand("IVideoRecorder.StopLiveVideo")]
		void StopLiveVideo();

		[UmsCommand("IVideoRecorder.WaitForGrabToComplete")]
		string WaitForGrabToComplete(int timeoutms);
	}
}
