
// 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.Linq;
using System.Collections.Generic;

using Hiperscan.Unix;
using Hiperscan.Spectroscopy;

namespace Hiperscan.Extensions.ReferenceCheck.Control.Acquisition
{
    public class CalibrationSessions
    {
        public void GetNextSession()
        {
            this.SessionIndex++;
            if (this.SessionIndex >= this.SessionQuue.Count)
                throw new Exception(Catalog.GetString("There are no further sessions available."));

            this.CurrentSession = this.SessionQuue[this.SessionIndex];
        }

        public void AddSession(int id, int number_of_acquisitions)
        {
            CalibrationSession session = new CalibrationSession(id, number_of_acquisitions);

            if (this.SessionQuue.Any(item => item.Id == id))
                throw new Exception(Catalog.GetString("The session ID has already been added"));

            this.SessionQuue.Add(session);
            this.SessionQuue.Sort();
        }

        public void AddSpectra(Spectrum dark, Spectrum white, Spectrum oxid)
        {
            this.CurrentSession.DarkSpectrum = dark;
            this.CurrentSession.WhiteSpectrum = white;
            this.CurrentSession.OxidSpectrum = oxid;
        }

        public CalibrationSession CurrentSession { get; private set; } = null;
        public List<CalibrationSession> SessionQuue { get; private set; } = new List<CalibrationSession>();
        private int SessionIndex { get; set; } = -1;
    }
}
