package org.cellocad.MIT.logic_motif_synthesis;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.*;

//import org.json.JSONArray;
//import org.json.JSONObject;
//This is to write the results to a file.
public class JsonWriter{
	public static void writeToJson(HashMap<String,ArrayList<Circuit>> foundTruthValues, String dir,double runtime,Date d, double currCost, HashSet<String> allowedOps){
		ArrayList<JSONObject> content = new ArrayList<JSONObject> ();
		
		JSONObject details = new JSONObject();
		details.put("collection", "run_details");
		details.put("operations_used", allowedOps);
		details.put("operation_costs", ConstantProperties.costPerOp);
		details.put("number_found", Integer.toString(foundTruthValues.size()));
		details.put("runtime", runtime);
		details.put("date_started", d);
		details.put("max_cost", currCost);
		content.add(details);
		
		ArrayList<String> truthValues = new ArrayList<String>(foundTruthValues.keySet());
		Collections.sort(truthValues);
		for (String tv:truthValues){
			JSONObject tvCircPair = new JSONObject();
			JSONArray circList = new JSONArray();
			for(Circuit circ:foundTruthValues.get(tv)){
				circList.add(circ.toString());
			}
			tvCircPair.put("truthValue", tv);
			tvCircPair.put("circuits", circList);
			content.add(tvCircPair);
		}
		prettyPrintJSONArray(content,dir, false);
	}
	public static void prettyPrintJSONArray(ArrayList<JSONObject> objects, String filepath, boolean append) {


        String json_array = "";


        for(int i=0; i<objects.size(); ++i) {


            JSONObject obj = objects.get(i);


            Gson gson = new GsonBuilder().disableHtmlEscaping().setPrettyPrinting().create();
            String json = gson.toJson(obj);


            json_array += json;



            if(i < objects.size() - 1) {
                json_array += ",\n";
            }



        }

        fileWriter(filepath, "[\n" + json_array + "\n]\n", append);
    }
	//Used to save the results in a file.
    public static void fileWriter(String outfile, String contents, boolean append) {
        try{
            BufferedWriter bw  = new BufferedWriter(new FileWriter(new File(outfile), append)); //append
            bw.write(contents);
            bw.close();
        }catch(Exception e) {
        }
    }
}