// Created with MonoDevelop
//
//    Copyright (C) 2017 Hiperscan GmbH Dresden, Germany
//
//    This program is free software: you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program.  If not, see <http://www.gnu.org/licenses/>.



using System;
using System.Runtime.Serialization;
using System.Collections.Generic;

namespace Hiperscan.Spectroscopy.IdentModule
{
	[Serializable()]
    public class ResultSet
	{
        public enum IdentificationMode
        {
            None,
            BlindClassification,
            WithSpecifiedSubstanceId,
        }

        public const string NO_ID = "NO_ID";

        public ResultSet()
        {
            this.PositiveIdentified = false;
            this.ClassificationMatch = false;
            this.Rating = 0.0;
            this.MinRating = 0.0;
            this.SpectrumBackProjection = null;
            this.MatchBackProjection = null;
            this.Identifier = String.Empty;
            this.MatchId = String.Empty;
            this.MatchRating = 0.0;
            this.Date = DateTime.MinValue;
            this.PcaMatches = new List<NormalizedPCAMatch>();
            this.SignificanceLevel = String.Empty;
            this.ClassificationId = ResultSet.NO_ID;
            this.IdentficationMode = IdentificationMode.None;
        }

        public override string ToString()
        {
            return $"ResultSet: MatchId={this.MatchId}, PositiveIdentified={this.PositiveIdentified}, ClassificationId={this.ClassificationId}";
        }

        public bool TruePositive 
        { 
            get
            {
                return this.IdentficationMode == IdentificationMode.WithSpecifiedSubstanceId &&
                           this.PositiveIdentified &&
                           this.ClassificationMatch;
            }
        }  

		public bool PositiveIdentified 				{get; set;}		
		public bool ClassificationMatch   			{get; set;}
		public double Rating 						{get; set;}
		public double MinRating 					{get; set;}
		public DataSet SpectrumBackProjection 		{get; set;}
		public DataSet MatchBackProjection			{get; set;}
		public string Identifier					{get; set;}
		public DateTime Date						{get; set;}
		public string MatchId						{get; set;}
		public double MatchRating					{get; set;}
		public List<NormalizedPCAMatch> PcaMatches	{get; set;}	
        public string SignificanceLevel				{get; set;}
		public string ClassificationId				{get; set;}
        public IdentificationMode IdentficationMode {get; set;}        	
	}
}

