#ifndef SETTINGS_H
#define SETTINGS_H

#include <string>
#include <vector>

namespace Settings {

	const std::string pathbase = "/mnt/vm/paper/OTHER2017/";
	const std::string pathData = pathbase + "/data/";
	const std::string pathWalks = pathbase + "/data/";
	const std::string pathWalksToni = pathbase + "/data/toni/";
	const std::string pathWiFi = pathbase + "/data/wifi/";

	// GPS walks
	const std::string path1a = pathWalks + "path1/1490208103510.csv";
	const std::string path1b = pathWalks + "path1/1490208519267.csv";

	const std::string path2a = pathWalks + "path2/1490208940015.csv";
	const std::string path2b = pathWalks + "path2/1490209320343.csv";

	// nonGPS walks
	const std::string path_toni_all_1a = pathWalksToni + "all/path1/1490031549543.csv";
	const std::string path_toni_all_1b = pathWalksToni + "all/path1/1490031883742.csv";

	const std::string path_toni_all_2a = pathWalksToni + "all/path2/1490032575999.csv";
	const std::string path_toni_all_2b = pathWalksToni + "all/path2/1490032861864.csv";


	const std::string path_toni_inst_1a = pathWalksToni + "inst/path1/1489769326868.csv";
	const std::string path_toni_inst_1b = pathWalksToni + "inst/path1/1489769510080.csv";

	const std::string path_toni_inst_2a = pathWalksToni + "inst/path2/1489774173022.csv";
	const std::string path_toni_inst_2b = pathWalksToni + "inst/path2/1489774361865.csv";

	const std::string path_toni_inst_3a = pathWalksToni + "inst/path3/1489776812891.csv";
	const std::string path_toni_inst_3b = pathWalksToni + "inst/path3/1489776979143.csv";


	const std::string wifiAllFixed = pathWiFi + "allFixed.xml";
	const std::string wifiAllOptPar = pathWiFi + "allOptPar.xml";
	const std::string wifiEachOptPar = pathWiFi + "eachOptPar.xml";
	const std::string wifiEachOptParPos = pathWiFi + "eachOptParPos.xml";

	const std::string wifiEachOptParPos_only0th = pathWiFi + "eachOptParPos_only0th.xml";
	const std::string wifiEachOptParPos_only1st = pathWiFi + "eachOptParPos_only1st.xml";
	const std::string wifiEachOptParPos_only2nd = pathWiFi + "eachOptParPos_only2nd.xml";
	const std::string wifiEachOptParPos_only3rd = pathWiFi + "eachOptParPos_only3rd.xml";

	const std::string wifiEachOptParPos_multimodel = pathWiFi + "eachOptParPos_multimodel.xml";

	const std::string wifiEachOptParPos_perBBox = pathWiFi + "eachOptParPos_perBBox.xml";


	const std::string fMap = pathbase + "/data/SHL38_no_elev.xml";
	const std::string fCalib = pathbase + "/data/wifi_fp_all.dat";

	const std::string fPathGFX = pathbase + "/tex/gfx/";

	int numParticles = 10000;

	float smartphoneAboveGround = 1.3;

	namespace IMU {
		const float turnSigma = 1.25;//1.5;
		const float stepLength = 0.70+0.3;
		const float stepSigma = 0.15 + 0.10;
		const float absHeadSigma = 20;
	}

	namespace Grid {
		constexpr int gridSize_cm = 20;
	}

	namespace Filter {
		const Timestamp updateEvery = Timestamp::fromMS(500);
	}


//	//const GridPoint destination = GridPoint(70*100, 35*100, 0*100);		// use destination
//	const GridPoint destination = GridPoint(0,0,0);							// do not use destination

//	namespace SensorDebug {
//		const Timestamp updateEvery = Timestamp::fromMS(200);
//	}

	namespace WiFiModel {

		constexpr float sigma = 8.0;

		/** if the wifi-signal-strengths are stored on the grid-nodes, this needs a grid rebuild! */
//		constexpr float TXP = -44;
//		constexpr float EXP = 2.5;
//		constexpr float WAF = -8.0;
//		constexpr float TXP = -64.5896;
//		constexpr float EXP = 1.25986;
//		constexpr float WAF = -2.47467;

		// how to perform VAP grouping
		const VAPGrouper vg_calib = VAPGrouper(VAPGrouper::Mode::LAST_MAC_DIGIT_TO_ZERO, VAPGrouper::Aggregation::MEDIAN);
		const VAPGrouper vg_eval  = VAPGrouper(VAPGrouper::Mode::LAST_MAC_DIGIT_TO_ZERO, VAPGrouper::Aggregation::MEDIAN);
	}


	namespace GroundTruth {

		// IPIN2017 [toni]
		//const std::vector<int> path1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
		//const std::vector<int> path2 = {11, 12, 3, 2, 1, 0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 11};
		//const std::vector<int> path3 = {31, 32, 33, 34, 35, 36, 37, 38};

		// OTHER2017 [frank]
		const std::vector<int> path1 = {40, 41, 42, 43, 44, 45, 1, 0, 46, 47, 48, 49, 50, 51, 52};
		const std::vector<int> path2 = {53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66};
		//const std::vector<int> path3 = {52, 51, 67, 68, 50, 49, 69, 70, 71, 72, 73, 74, 75, 76, 77, 73, 78, 79, 80, 81, 61, 82, 83, 84, 42, 41, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95};

		//const std::vector<int> path_toni_all_1 = {40,41,42,43,44,45, 1, 0, 46,47,48,49,50,51,52};	// same as PATH1
		//const std::vector<int> path_toni_all_2 = {53,54,55,56,57,58,59,60,61,62,63,64,65,66};		// same as PATH2

		const std::vector<int> path_toni_inst_1 = {0,1,2,3,4,5,6,7,8,9,10};
		const std::vector<int> path_toni_inst_2 = {11, 12, 3, 2, 1, 0, 13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30, 11};
		const std::vector<int> path_toni_inst_3 = {31,32,33,34,35,36,37,38};

	}

}

#endif // SETTINGS_H
