// bytran -|- spectral calculations for portable devices using the HITRAN database
//
// Developed by Dzianis Pliutau (Denis Plutov) and Kostya Roslyakov
// www.bytran.org | contact@bytran.org
// Copyright (c) 2016 Dzianis Pliutau
// Distributed under the MIT license
//
// The MIT License (MIT)
// Copyright (c) 2016 Dzianis Pliutau
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software
// is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
// IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.



// Class is used to save and load the configuration information from the previous program run
#include "wavelength.h"
#include "params.h"
#include "atmosphere.h"
#include "instrumentalfunction.h"
#include "hitranonlinedownloader.h"
#include "temperatureunitsconvert.h"
#include "pathlengthunitsconvert.h"
#include "concpressunitsconvert.h"
#include "yaxis.h"
#include "sensors.h"

#ifndef CONFIGINPUTOUTPUT_H
#define CONFIGINPUTOUTPUT_H

class ConfigInputOutput
{
public:

    ConfigInputOutput();

    // Method to get and set the configuration file path
    QString getConfigFilePath();
    void setConfigFilePath(QString newConfigFilePath);

    // Method to save the configuration to a configuration file
    void saveToConfig();
    // Method to load the configuration from the configuration file
    void loadToConfig();

    // Method to save and load the partial pressures
    void saveConcentrations(QString fileName);
    void loadConcentrations(QString fileName);

    // Method to set references to all objects for which the configuration is to be saved or loaded
    void setObjects(Wavelength *inWavelength,
                    Params *inParams,
                    Atmosphere *inAtmosphere,
                    InstrumentalFunction *inInstrFunct,
                    HitranOnlineDownloader *inHitranDownloader,
                    TemperatureUnitsConvert *inTempUnitsConvert,
                    PathlengthUnitsConvert *inPathUnitsConvert,
                    ConcPressUnitsConvert *inConcPressUnitsConvert,
                    YAxis *inYaxis,
                    Sensors *inSensors);

private:

    // List of references to objects for which the configuration is to be saved to the harddrive
    Wavelength *wavelength;
    Params *params;
    Atmosphere *atmosphere;
    InstrumentalFunction *instrFunct;
    HitranOnlineDownloader *hitranDownloader;
    TemperatureUnitsConvert *tempUnitsConvert;
    PathlengthUnitsConvert *pathUnitsConvert;
    ConcPressUnitsConvert *concPressUnitsConvert;
    YAxis *yaxis;
    Sensors *sensors;

    // Path to the configuration file
    QString configFilePath;

};

#endif // CONFIGINPUTOUTPUT_H
