// Created with MonoDevelop
//
//    Copyright (C) 2013 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.SGS.Common;
using Hiperscan.Spectroscopy;
using Hiperscan.Spectroscopy.IO;
using Hiperscan.SGS.SerialInterface;
using Hiperscan.Spectroscopy.Processing;
using Hiperscan.Spectroscopy.ReferenceChecks;

namespace Hiperscan.SGS.Benchtop
{
    public partial class StabilizedFinderX
    {
        public ProbeType ProbeType { get; set; }

        public Finder Finder { get; protected set; }

        public ReferenceBlockProcessor SpectrumProcessor { get; set; }

        public ReferenceBlockProcessor ProcessorForCorrection { get; set; }

        public ReferenceChecks ReferenceChecks { get; set; }

        public IDevice Device { get; private set; }

        public bool AutoSaveReferences { get; set; }

        public string AutoSaveDirectory { get; set; }

        public TimeSpan LightSourceWaitSpan { get; set; } = new TimeSpan(0, 5, 0);

        public ushort ReferencingAverage { get; set; }

        public DateTime ReferencingTime { get; set; }

        public FinderStatus FinderStatus { get; private set; }

        public DarkIntensity DarkIntensity { get; private set; }

        public bool AutonomousMode { get; } = false;

        public double AutonomousTargetTemperature { get; } = double.NaN;

        public TimeSpan ReferencingMaxDuration { get; }

        public bool IgnoreLowTemperature
        {
            get { return this.ignore_low_temperature; }
            set { this.ignore_low_temperature = value; }
        }
            
    }
}
