
// Created with MonoDevelop
//
//    QuickStep: Acquire, view and identify spectra 
//    Copyright (C) 2024. 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.Collections.Generic;

using Hiperscan.Unix;
using Hiperscan.Spectroscopy;

namespace Hiperscan.Extensions.ReferenceCheck.Control.Acquisition
{
    public class AcquisitionSession : IComparable<AcquisitionSession>
    {
        public AcquisitionSession(int id, int number_of_acuisitions)
        {
            this.Id = id;
            this.NumberOfAcquisitions = number_of_acuisitions;
        }

        public void AddSpectrum(string serial, Spectrum spectrum)
        {
            if (this.AcquisitionsIsCompleted)
                throw new Exception(Catalog.GetString("Cannot confirm acquisition success, because the session is already completed."));

            this.Spectra.Add(serial, spectrum);
        }

        public int CompareTo(AcquisitionSession other)
        {
            return this.Id.CompareTo(other.Id);
        }

        public bool AcquisitionsIsCompleted
        {
            get
            {
                return this.Spectra.Count == this.NumberOfAcquisitions;
            }
        }

        public Dictionary<string, Spectrum> Spectra { get; set; } = new Dictionary<string, Spectrum>();
        public int Id { get; private set; }
        public int NumberOfAcquisitions { get; private set; }
    }
}
