// **********************************************************************************************************
//    IDisplay.cs
//    2/17/2023
//    NGI - Next Generation Interceptor
//    
//    Contract No. HQ0856-21-C-0003/1022000209
//    
//    THIS DOCUMENT DOES NOT CONTAIN TECHNOLOGY OR TECHNICAL DATA CONTROLLED UNDER EITHER THE U.S. 
//    INTERNATIONAL TRAFFIC IN ARMS REGULATIONS OR THE U.S. EXPORT ADMINISTRATION REGULATIONS.
//    
//    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.
//    
//    UNPUBLISHED WORK - COPYRIGHT RAYTHEON COMPANY.
//    
//    DESTRUCTION NOTICE: FOR CLASSIFIED DOCUMENTS FOLLOW THE PROCEDURES IN DOD 5220.22-M, 
//    NATIONAL INDUSTRIAL SECURITY PROGRAM OPERATING MANUAL, FEBRUARY 2006, 
//    INCORPORATING CHANGE 1, MARCH 28, 2013, CHAPTER 5, SECTION 7, OR DODM 5200.01-VOLUME 3, 
//    DOD INFORMATION SECURITY PROGRAM: PROTECTION OF CLASSIFIED INFORMATION, ENCLOSURE 3, 
//    SECTION 17. FOR CONTROLLED UNCLASSIFIED INFORMATION FOLLOW THE PROCEDURES IN DODM 5200.01-VOLUME 4, 
//    INFORMATION SECURITY PROGRAM: CONTROLLED UNCLASSIFIED INFORMATION.
//    
//    CONTROLLED BY: MISSILE DEFENSE AGENCY
//    CONTROLLED BY: GROUND-BASED MIDCOURSE DEFENSE PROGRAM OFFICE
//    CUI CATEGORY: CTI 
//    DISTRIBUTION/DISSEMINATION CONTROL: F 
//    POC: Alex Kravchenko (1118268)
// **********************************************************************************************************

using System.Collections.Generic;

namespace Raytheon.Common
{
	/// <summary>
	/// Enum for tagging the logged data.
	/// </summary>
	public enum LogLevel
	{
		/// <summary>
		/// (Ordinal = 0) : Most verbose level. Used for development and seldom enabled in production.
		/// </summary>
		TRACE,
		/// <summary>
		/// (Ordinal = 1) : Debugging the application behavior from internal events of interest.
		/// </summary>
		DEBUG,
		/// <summary>
		/// An informational log statement.
		/// (Ordinal = 2) : Information that highlights progress or application lifetime events.
		/// </summary>
		INFO,
		/// <summary>
		/// (Ordinal = 3) : Warnings about validation issues or temporary failures that can be recovered.
		/// </summary>
		WARN,
		/// <summary>
		/// (Ordinal = 4) : Errors where functionality has failed or <see cref="System.Exception"/> have been caught.
		/// an error log statement.
		/// </summary>
		ERROR,
		/// <summary>
		/// (Ordinal = 5) : Most critical level. Application is about to abort.
		/// </summary>
		FATAL,
		/// <summary>
		/// Off log level (Ordinal = 6)
		/// </summary>
		OFF
	}

	public interface IDisplay
	{
		/// <summary>
		/// user interface capability with error logger
		/// </summary>
		/// <param name="message"></param>
		/// <param name="logLevel"></param>
		void ShowMessage(string message, LogLevel logLevel = LogLevel.INFO);
	}

	public interface IChillerDisplay
	{
		void ChillerMonitorUiUpdate(ActiveHealthMonitorData data, int errorCode);
	}

	public interface IDioDisplay
	{
		void DioControlUiUpdate(List<string> inputNames, List<string> outputNames);
	}

	public interface IFpgaDisplay
	{
		void FpgaControlUiUpdate(List<string> fpgaNames);
	}

	public interface IPowerControlDisplay
	{
		void PowerControlUiUpdate(List<string> powerFormNames);
	}

	public interface IPowerMonitorDisplay
	{
		void PowerMonitorUiUpdate(List<PowerMonitorCallbackData> callBackDataList, int errorCode);
	}

	public interface IHealthMonitorDisplay
	{
		void HealthMonitorControlUiUpdate(List<ActiveHealthMonitorData> callBackDataList);
	}

	public interface INGIDisplay : IDisplay, IChillerDisplay, IDioDisplay, IFpgaDisplay, IPowerControlDisplay, IPowerMonitorDisplay, IHealthMonitorDisplay
	{
	}

	public interface IHandleCriticalError
	{
		void HandleCriticalError(string message, bool shallWeStopThreads = true);
	}
}
