#ifndef UTILS_H
#define UTILS_H

#include "typeDefinitions.h"

#include <atomic>

#include <QList>
#include <QPair>

class QDir;

namespace utils
{
//GLOBALS
QString configFile(QString filename="");
QString settingsFile(QString filename="");
QString outDir(QString dirname="");

seconds recDuration(seconds=0s);
qint64 frameSize(qint64 frameSize=0); //Note: its an estimate and can be easily set in config!
int fps(int fps=0); //TODO: no effect yet.

int threadsPerCam();
int ncam(const int& n=0); //return number of cams

const QChar DELIM='|';
extern std::atomic<bool> running; //global flag to ensure proper exit of threads


//FUNCTIONS
bool parseConfig(QList<QPair<QString,QString>>&);
qint64 parseInt(const QString& key, const QJsonObject& jsonObject);
QString parseString(const QString& key, const QJsonObject& jsonObject);
bool parseBool(const QString& key, const QJsonObject& jsonObject);

QString getFirstFileInAppDirEndingWith( QString const&);

const QStringList getVersions();
const QString getVersion();
const QString errorCodeToMessage( VmbError_t );


//ENUMS
typedef enum camtronErr
{
	errWarning = 100,			//!< warning
	errCamIdx,					//!< camera index out of range
	errNoCams,					//!< no cameras found
	errRegisterCamObserver,		//!< cant register camobserver
	errLessCamsThanExpected,	//!< no cameras found
	errRecordInvalid, 			//!< record invalid
} camtronErr;

} //namespace utils
#endif