package org.gcube.dataanalysis.geo.test.projections;

import java.io.File;
import java.io.FileWriter;

import org.gcube.contentmanagement.lexicalmatcher.utils.AnalysisLogger;
import org.gcube.dataanalysis.ecoengine.configuration.AlgorithmConfiguration;
import org.gcube.dataanalysis.geo.connectors.table.TableMatrixRepresentation;
import org.gcube.dataanalysis.geo.matrixmodel.XYExtractor;
import org.gcube.dataanalysis.geo.utils.MapUtils;

public class TestExtractionXYMatrixFromTable {

	public static void sliceTableAquaMaps(AlgorithmConfiguration config) throws Exception {
		// latimeria chalumnae
		config.setParam(TableMatrixRepresentation.tableNameParameter, "testextractionaquamaps");
		config.setParam(TableMatrixRepresentation.xDimensionColumnParameter, "approx_x");
		config.setParam(TableMatrixRepresentation.yDimensionColumnParameter, "approx_y");
		config.setParam(TableMatrixRepresentation.timeDimensionColumnParameter, "time");
		config.setParam(TableMatrixRepresentation.valueDimensionColumnParameter, "f_probability");
		config.setParam(TableMatrixRepresentation.filterParameter, "");
	}

	public static void sliceTablePhImported(AlgorithmConfiguration config) throws Exception {
		// ph
		config.setParam("DatabaseUserName", "utente");
		config.setParam("DatabasePassword", "d4science");
		config.setParam("DatabaseURL", "jdbc:postgresql://statistical-manager.d.d4science.org/testdb");
		config.setParam(TableMatrixRepresentation.tableNameParameter, "generic_idbc699da3_a4d5_40fb_80ff_666dbf1316d5");
		config.setParam(TableMatrixRepresentation.xDimensionColumnParameter, "x");
		config.setParam(TableMatrixRepresentation.yDimensionColumnParameter, "y");
		config.setParam(TableMatrixRepresentation.timeDimensionColumnParameter, "time");
		config.setParam(TableMatrixRepresentation.valueDimensionColumnParameter, "fvalue");
		config.setParam(TableMatrixRepresentation.filterParameter, "");
	}

	
	public static void sliceTablePh(AlgorithmConfiguration config) throws Exception {
		// ph
		config.setParam(TableMatrixRepresentation.tableNameParameter, "testextraction");
		config.setParam(TableMatrixRepresentation.xDimensionColumnParameter, "x");
		config.setParam(TableMatrixRepresentation.yDimensionColumnParameter, "y");
		config.setParam(TableMatrixRepresentation.timeDimensionColumnParameter, "time");
		config.setParam(TableMatrixRepresentation.valueDimensionColumnParameter, "fvalue");
		config.setParam(TableMatrixRepresentation.filterParameter, "");
	}
	
	public static void sliceMapCreated(AlgorithmConfiguration config) throws Exception {

		config.setParam(TableMatrixRepresentation.tableNameParameter, "testextraction2");
		config.setParam(TableMatrixRepresentation.xDimensionColumnParameter, "x");
		config.setParam(TableMatrixRepresentation.yDimensionColumnParameter, "y");
		config.setParam(TableMatrixRepresentation.timeDimensionColumnParameter, "time");
		config.setParam(TableMatrixRepresentation.valueDimensionColumnParameter, "fvalue");
		config.setParam(TableMatrixRepresentation.filterParameter, "");
	}
	
	public static void sliceMapCreated2(AlgorithmConfiguration config) throws Exception {
		
		config.setParam(TableMatrixRepresentation.tableNameParameter, "testextraction2");
		config.setParam(TableMatrixRepresentation.xDimensionColumnParameter, "approx_x");
		config.setParam(TableMatrixRepresentation.yDimensionColumnParameter, "approx_y");
		config.setParam(TableMatrixRepresentation.timeDimensionColumnParameter, "time");
		config.setParam(TableMatrixRepresentation.valueDimensionColumnParameter, "f_temp");
		config.setParam(TableMatrixRepresentation.filterParameter, "");
	}
	
	public static void sliceMaxEnt(AlgorithmConfiguration config) throws Exception {
		
		config.setParam(TableMatrixRepresentation.tableNameParameter, "rstrf31af9ff13de42e583327e4ca51c38ef");
		config.setParam(TableMatrixRepresentation.xDimensionColumnParameter, "x");
		config.setParam(TableMatrixRepresentation.yDimensionColumnParameter, "y");
		config.setParam(TableMatrixRepresentation.timeDimensionColumnParameter, "time");
		config.setParam(TableMatrixRepresentation.valueDimensionColumnParameter, "fvalue");
		config.setParam(TableMatrixRepresentation.filterParameter, "");
	}

	public static void sliceTableMapServer(AlgorithmConfiguration config) throws Exception {
		
		config.setParam(TableMatrixRepresentation.tableNameParameter, "testextraction3");
		config.setParam(TableMatrixRepresentation.xDimensionColumnParameter, "approx_x");
		config.setParam(TableMatrixRepresentation.yDimensionColumnParameter, "approx_y");
		config.setParam(TableMatrixRepresentation.timeDimensionColumnParameter, "time");
		config.setParam(TableMatrixRepresentation.valueDimensionColumnParameter, "f_depth");
		config.setParam(TableMatrixRepresentation.filterParameter, "");
	}
	
	
	public static void main(String[] args) throws Exception {
		AnalysisLogger.setLogger("./cfg/" + AlgorithmConfiguration.defaultLoggerFile);
		AlgorithmConfiguration config = new AlgorithmConfiguration();

		config.setConfigPath("./cfg/");
		config.setPersistencePath("./");
		config.setParam("DatabaseUserName", "gcube");
		config.setParam("DatabasePassword", "d4science2");
		config.setParam("DatabaseURL", "jdbc:postgresql://localhost/testdb");
		config.setParam("DatabaseDriver", "org.postgresql.Driver");
		config.setGcubeScope("/gcube/devsec/devVRE");
		sliceTableMapServer(config);

		double resolution = 1;
		FileWriter fw = new FileWriter(new File("maps.txt"));

		XYExtractor extractor = new XYExtractor(config);
		double[][] matrix = extractor.extractXYGrid(null, 0, -180, 180, -90, 90, 0, resolution, resolution);
		String map = MapUtils.globalASCIIMap(matrix);
		fw.write(map);

		fw.close();
		System.out.println("DONE!");
	}

}
