/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package eu.dnetlib.espas.spatial.impl;


import eu.dnetlib.espas.gui.server.utils.EmailUtils;
import eu.dnetlib.espas.spatial.BBoxQShape;
import eu.dnetlib.espas.spatial.Point;
import eu.dnetlib.espas.spatial.QShape;
import eu.dnetlib.espas.spatial.QueryCRS;
import eu.dnetlib.espas.spatial.TimePeriodConstraint;
import eu.dnetlib.espas.spatial.shared.SpatialQueryStatus;
import eu.dnetlib.espas.spatial.utils.QueryDBUtils;
import eu.dnetlib.espas.spatial.utils.QueryStatusMonitor;
import eu.dnetlib.espas.spatial.utils.SQDiskMonitor;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import static org.junit.Assert.assertNotNull;
import org.junit.Before;
import org.junit.Test;
import org.postgresql.ds.PGPoolingDataSource;

/**
 *
 * @author georgeathanasopoulos
 */
public class Ticket929Test {

    private SQDiskMonitor dskMonitor;
   private QueryDBUtils spDBUtils;
   private QueryStatusMonitor queryMonitor;
    

    @Before
    public void setup(){
      PGPoolingDataSource dataSource = new PGPoolingDataSource();
      dataSource.setDatabaseName("dnet_espas");
      dataSource.setServerName("194.177.192.218");
      dataSource.setUser("dnet");
      dataSource.setPassword("dnetPwd");
      dataSource.setMaxConnections(100);
      spDBUtils = new QueryDBUtils();
      spDBUtils.setDatabaseURL("jdbc:postgresql://194.177.192.218/dnet_espas");
      spDBUtils.setDatabaseUsername("dnet");
      spDBUtils.setDatabasePassword("dnetPwd");
      spDBUtils.setSpDBSource(dataSource);
      spDBUtils.init();
      spDBUtils.setTempDataFileStore("/tmp/espas/data/");
      dskMonitor = new SQDiskMonitor();
      dskMonitor.setSatelliteLocationPath("/tmp/espas/spatial/sat/");
      dskMonitor.setSatelliteListFilePath("/home/gathanas/My_Projects/ESPAS/satlocation/spacecraft_list.txt");
      dskMonitor.setSatelliteUtilityProcessKernelPath("/home/gathanas/My_Projects/ESPAS/satlocation");
      dskMonitor.setSatelliteUtilityProcessPath("/home/gathanas/My_Projects/ESPAS/satlocation/ESPAS_trajectory");
      dskMonitor.setSatelliteTLEPath("/home/gathanas/My_Projects/ESPAS/satlocation/tle");
 
      queryMonitor=new QueryStatusMonitor();
      queryMonitor.setEmailUtils(new EmailUtils());
      queryMonitor.setQueryDBUtils(spDBUtils);
      queryMonitor.setStatusMonitorPeriod(200000);

    }

//    @Test
    public void testNoAQuery() throws ParseException, InterruptedException{
     System.out.println("findObservationsByBoxLocation");
      
      System.loadLibrary("CXFormLib");
      Point lowerLeft = new Point();
      
      lowerLeft.setCoordinate(Point.PolarCoord.LAT_Cord.name(), new Double(-90.0d));
      lowerLeft.setCoordinate(Point.PolarCoord.LON_Cord.name(), new Double(0.0d));
      lowerLeft.setCoordinate(Point.PolarCoord.R_Cord.name(), new Double(6371000.0));

      Point upperRight = new Point();
      upperRight.setCoordinate(Point.PolarCoord.LAT_Cord.name(), new Double(90.0d));
      upperRight.setCoordinate(Point.PolarCoord.LON_Cord.name(), new Double(360.0d));
      upperRight.setCoordinate(Point.PolarCoord.R_Cord.name(), new Double(6371000.0+5000.0d));
      
      QShape querySpace = new BBoxQShape(lowerLeft, upperRight);
      querySpace.setEspasCRS(QueryCRS.GEOSpherical.espasValue());
      QueryCRS crs = QueryCRS.GEOSpherical;
      
      TimePeriodConstraint tCon = new TimePeriodConstraint();
      SimpleDateFormat dtFormater = new SimpleDateFormat("dd-MM-yyyy");
      tCon.setFromDate(dtFormater.parse("01-03-2009"));
      tCon.setToDate(dtFormater.parse("30-03-2009"));
      
      String userid = "george.athanasopoulos";
      QueryEngineImpl instance = new QueryEngineImpl();
      instance.setDiskMonitor(dskMonitor);
      instance.setEnableSatellite(Boolean.TRUE);
      instance.setQueryEnginePoolSize(2);
      instance.setdBUtils(QueryDBUtils.getQueryDBInstance());
      instance.init();
      String result = instance.findObservationsByLocation(querySpace, crs, tCon, userid);
      assertNotNull(result);
      while (instance.getQueryStatus(result, userid).getStatus()==SpatialQueryStatus.QueryStatus.RUNNING||
              instance.getQueryStatus(result, userid).getStatus()==SpatialQueryStatus.QueryStatus.PENDING||
              instance.getQueryStatus(result, userid).getStatus()==SpatialQueryStatus.QueryStatus.SUBMITTED) {
         Thread.sleep(100*100);
      }
          System.out.println("Query Status is : "+instance.getQueryStatus(result, userid).getStatus().name());
      // TODO review the generated test code and remove the default call to fail.
         
    }
    
    
}
