package o2mc.io.dimmldependency.Datastreams;

import android.os.AsyncTask;
import android.util.Log;

import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * Created by nickyromeijn on 15/02/16.
 * Async task used for posting data to set endpoint
 */
public class DatastreamsPost extends AsyncTask<ArrayList<JSONObject>, Void, ArrayList<JSONObject>> {

    private String environmentID = "nromeijn";
    private DatastreamsDispatcher datastreamsDispatcher;
    private JSONObject generalInfo;

    public DatastreamsPost(DatastreamsDispatcher dispatcher, JSONObject generalInfo) {
        datastreamsDispatcher = dispatcher;
        this.generalInfo = generalInfo;
    }

    @Override
    protected ArrayList<JSONObject>doInBackground(ArrayList<JSONObject>... params) {

        JSONArray dataAsJson = new JSONArray(params[0]);

        HttpClient httpclient = new DefaultHttpClient();
//        getEndpoint
        String endpoint = datastreamsDispatcher.getSettings().getEndpoint();
//        HttpPost httppost = new HttpPost("https://baltar-dev.dimml.io/flow/code.js?dimml.concept=//" + this.environmentID + "@hema.android/AndroidNative");
        if(endpoint != null) {
            HttpPost httppost = new HttpPost(endpoint);

            try {
                List<NameValuePair> postParams = new ArrayList<NameValuePair>(2);
                JSONObject root = new JSONObject();
                try {
                    root.put("identity", datastreamsDispatcher.getDatastreamsHandler().getIdentity());
                    root.put("alias", datastreamsDispatcher.getDatastreamsHandler().getAlias());
                    root.put("tracked", dataAsJson);
                    root.put("application", generalInfo);
                    Log.e("Object", root.toString());
                } catch (JSONException e) {
                    e.printStackTrace();
                }
                postParams.add(new BasicNameValuePair("data", root.toString()));
                httppost.setEntity(new UrlEncodedFormEntity(postParams, "UTF-8"));
                HttpResponse response = httpclient.execute(httppost);

//            Log.e("POSTING TO", endpoint);
                Log.e("STATUS ", "Status line : " + response.getStatusLine().toString());

            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return params[0];
    }

    @Override
    protected void onPostExecute(ArrayList<JSONObject> datacontainers) {
        Log.e("POSTING", "Clearing memory");
        datastreamsDispatcher.postInProgress = false;
        datastreamsDispatcher.callback();
    }
}