/*    Copyright (c) 2011-2014, OpenIoT
 *    
 *    This file is part of OpenIoT.
 *
 *    OpenIoT is free software: you can redistribute it and/or modify
 *    it under the terms of the GNU Lesser General Public License as published by
 *    the Free Software Foundation, version 3 of the License.
 *
 *    OpenIoT is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *    GNU Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public License
 *    along with OpenIoT.  If not, see <http://www.gnu.org/licenses/>.
 *
 *     Contact: OpenIoT mailto: info@openiot.eu
 */

package org.openiot.integration;

import java.io.IOException;
import java.util.List;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.util.EntityUtils;

/**
 *
 * @author Aleksandar
 */
public class VirtualSensor {
    
    String gsnAddress;
    
    List<String> sensorParameters;
    List<String> sensorTypes;
    List<String> lsmProperty;
    List<String> lsmUnit;
    String virtualSensorID;
    int virtualSensorPort;
    double latitude;
    double longitude;
    
    public VirtualSensor (String id, int port, double lat, double lng, List<String> param, List<String> paramTypes, List<String>lsmProp, List<String> lsmUnits, String gsn){
        this.gsnAddress = gsn;
        this.virtualSensorID = id;
        this.virtualSensorPort = port;
        this.latitude = lat;
        this.longitude = lng;
        this.sensorParameters = param;
        this.sensorTypes = paramTypes;
        this.lsmProperty = lsmProp;
        this.lsmUnit = lsmUnits;
      
    }

    public void createAndRegister () throws IOException, InterruptedException {
        
        HttpClient client = HttpClientBuilder.create().build();
        String name = "FER"+virtualSensorID;

        WriteXMLFile xmlFile = new WriteXMLFile(name, virtualSensorPort, sensorParameters, sensorTypes);
        String virtualSensor = xmlFile.createXML();

        String url = "http://"+gsnAddress+"/vs/vsensor/" + name + "/create";
        HttpPost request = new HttpPost(url);
        StringEntity input = new StringEntity(virtualSensor);
        input.setContentType("text/xml");
        request.setEntity(input);
        HttpResponse response = client.execute(request);
        StatusLine statusLine = response.getStatusLine();
        boolean result = statusLine.getStatusCode() == 200;

        EntityUtils.toString(response.getEntity());
        response.getEntity().getContent().close();
        
        WriteMetadataFile metaFile = new WriteMetadataFile(name, virtualSensorID, latitude, longitude, sensorParameters, lsmProperty, lsmUnit);
        String sensorInstance = metaFile.createMetadata();
        
        url = "http://"+gsnAddress+"/vs/vsensor/" + name + "/register";
        request = new HttpPost(url);
        input = new StringEntity(sensorInstance);

        input.setContentType("text/xml");
        request.setEntity(input);
        response = client.execute(request);
         statusLine = response.getStatusLine();
         result = statusLine.getStatusCode() == 200;
        EntityUtils.toString(response.getEntity());
        response.getEntity().getContent().close(); 
    }
        
        
    
}
