
using System;
using System.Collections.Generic;
using System.Reflection;
using System.IO;
using Mono.Unix;

using Hiperscan.Extensions;


namespace Hiperscan.Extensions.AdditionalPlotTypes
{

	public class Plugin : IPlugin
	{
		public static readonly string name    = Catalog.GetString("Additional Plots");
		public static readonly string version = "0.90.0";
		public static readonly string vendor  = "Hiperscan GmbH";
		public static readonly string description = Catalog.GetString("Provides additional plot types");
		public static readonly Guid guid = new Guid("cc68a870-9018-11df-a4ee-0800200c9a66");
		
		internal static IHost host;
		private bool active = true;
		private PlotTypeInfo[] plot_type_infos;
		
		public Plugin ()
		{
			this.plot_type_infos = new PlotTypeInfo[] { 
				new CorrectionPlotTypeInfo(),
				new RawIntensityFFTAbsPlotTypeInfo(),
				new RawIntensityFFTArgPlotTypeInfo(),
				new LinearRegressionPlotTypeInfo(),
				new LinearRegressionCorrectionPlotTypeInfo(),
				new LinearRegressionCorrectionSnvPlotTypeInfo(),
				new RawIntensityPlotTypeInfo(),
				new ProbeError(),
				new ProbeErrorCorrection(),
				new ConvertZenithToTiO2Intensity(),
				new ConvertZenithToTiO2Background(),
				new ConvertZenithToTiO2Reflectivity(),
				new ZenithApoIdent2FitQuadratic(),
				new ZenithApoIdent2FitLinear(),
				new NistDeviation(),
				new RawNistDeviation(),
				new MeanNistDeviation()
//				new RawIntensityDifferencePlotTypeInfo(),
//				new AbsorbanceDifferencePlotTypeInfo(),
//				new IntensityQuotientPlotTypeInfo()
			};
		}
		
		public void ReplaceGui()
		{
		}
		
		public MenuInfo[] MenuInfos
		{
			get { return null; }
		}
		
		public ToolbarInfo[] ToolbarInfos
		{
			get { return null; }
		}
		
		public PlotTypeInfo[] PlotTypeInfos
		{
			get { return this.plot_type_infos; }
		}

		public FileTypeInfo[] FileTypeInfos
		{
			get { return null; }
		}

		public void Initialize(IHost host)
		{
			Plugin.host = host;
		}
		
		public string Name
		{
			get { return Plugin.name; }
		}
		
		public string Version
		{
			get { return Plugin.version; }
		}
		
		public string Vendor
		{
			get { return Plugin.vendor; }
		}

		public Assembly Assembly
		{
			get { return Assembly.GetExecutingAssembly(); }
		}

		public string Description
		{
			get { return Plugin.description; }
		}
		
		public Guid Guid
		{
			get { return Plugin.guid; }
		}
		
		public bool Active
		{
			get { return this.active;  }
			set { this.active = value; }
		}

		public bool CanReplaceGui
		{
			get { return false; }
		}
	}
}
