#ifndef _CNVCALLERGPU_H
#define _CNVCALLERGPU_H

#include <vector>
#include <map>
#include <string>
#include <htslib/sam.h>

class cnvCallerGPU
{
	public:
		cnvCallerGPU();
		cnvCallerGPU(std::string, std::string, std::string, std::string, std::string, int, int, double, int, int);
		int mainLoop();

        int getNbThread();
        int getWindowSize();
        int getStepSize();
        double getZscore();
        std::string getOutputFilePairs();
        std::string getOutputFileSplit();
        std::string getOutputFile();
        std::string getReferenceFile();
        std::string getBamFile();
		

    private :

		std::string sampleName;
		std::string inputBamFile;
		std::string referenceFile;
		std::string outputFile;
        std::string outputFilePairs; 
        std::string outputFileSplit;

        std::map<std::string, std::map<int32_t, std::map<int32_t, int32_t>>> rawCounts;
        std::map<std::string, std::map<int32_t, std::map<int32_t, float>>> gcContent;
        std::map<std::string, std::map<int32_t,int32_t>> refDict;

		int depthThreshold;
		int nbThread;
		int loggingLevel;
        int window; 
        int step; 

		double zscore;

        

		// method
        int getGenome();
        void displayGenome();
        int readBam(std::string, int32_t, int32_t);
        int bamParsingLauncher();
		

};
#endif