package com.sergiobatista.chalmers.thesis.userstoriesgenerator;

import org.apache.commons.lang3.text.WordUtils;
import org.json.JSONArray;
import org.json.JSONObject;

public class JSONGenerator {

	private JSONObject json = new JSONObject();

	/**
	 * input: [0] Timestamp, [1] Title, [2] Use Case, [3] Preconditions, [4]
	 * Actors, [5] Scenario, [6] Alternative Scenario, [7] Desired Outcome, [8]
	 * tags, [9] Where, [10] How, [11] What
	 */
	public JSONGenerator(String[] input) {
		String uuid = WordUtils.capitalizeFully(input[1].trim()).replaceAll(" ", "");
		json.put("uuid", uuid);
		
		this.setTitle(input[1]);
		this.setUseCase(input[2]);
		this.setPreConditions(input[3]);
		this.setActors(input[4]);
		this.setScenarios(input[5]);
		this.setAltScenarios(input[6]);
		this.setOutcome(input[7]);
		
		/**
		 * uncomment for  the old version
		 */
		//this.setTags(input[8]);
		
		JSONObject tags = new JSONObject();
		this.setWhere(input[9], tags);
		this.setHow(input[10], tags);
		this.setWhat(input[11], tags);
		json.put("tags", tags);
		
	}

	@Override
	public String toString() {
		return json.toString();
	}
	

	public JSONObject getJson() {
		return json;
	}

	private void setWhat(String input, JSONObject tags) {
		JSONArray arr = new JSONArray();

		breakIntoListItems(input, ", ", arr);

		tags.put("what", arr);
		
	}

	private void setHow(String input, JSONObject tags) {
		JSONArray arr = new JSONArray();

		breakIntoListItems(input, ", ", arr);

		tags.put("how", arr);
		
	}

	private void setWhere(String input, JSONObject tags) {
		JSONArray arr = new JSONArray();

		breakIntoListItems(input, ", ", arr);

		tags.put("where", arr);
		
	}
	
	/**
	 * @deprecated
	 * @param input
	 */
	private void setTags(String input) {
		JSONArray arr = new JSONArray();

		breakIntoListItems(input, ", ", arr);

		json.put("tags", arr);
	}

	private void setOutcome(String input) {
		json.put("outcome", input);
	}

	private void setAltScenarios(String input) {
		JSONArray arr = new JSONArray();

		breakIntoListItems(input, ", ", arr);

		json.put("alternativeScenarios", arr);
	}

	private void setScenarios(String input) {
		JSONArray arr = new JSONArray();

		breakIntoListItems(input, ", ", arr);

		json.put("scenarios", arr);
	}

	private void setActors(String input) {
		JSONArray arr = new JSONArray();

		breakIntoListItems(input, ", ", arr);

		json.put("actors", arr);
	}

	private void setPreConditions(String input) {
		JSONArray arr = new JSONArray();

		breakIntoListItems(input, ", ", arr);

		json.put("preConditions", arr);
	}

	private void setUseCase(String input) {
		json.put("useCase", input);
	}

	private void setTitle(String input) {
		json.put("title", input);
	}

	private void breakIntoListItems(String input, String delimiter,
			JSONArray arr) {
		String[] elements = input.trim().split(delimiter);
		for (String element : elements)
			arr.put(element);
	}

}

@@ -550,16 +550,21 @@
 laceAll(
+%0A%09%09%09%09
 %22 %22, %22%22)
@@ -591,18 +591,16 @@
  uuid);%0A
-%09%09
 %0A%09%09this.
@@ -805,18 +805,16 @@
 ut%5B7%5D);%0A
-%09%09
 %0A%09%09/**%0A%09
@@ -831,17 +831,16 @@
 ent for 
- 
 the old 
@@ -857,16 +857,17 @@
  */%0A%09%09//
+ 
 this.set
@@ -882,18 +882,16 @@
 ut%5B8%5D);%0A
-%09%09
 %0A%09%09JSONO
@@ -1045,18 +1045,16 @@
  tags);%0A
-%09%09
 %0A%09%7D%0A%0A%09@O
@@ -1117,18 +1117,16 @@
 ng();%0A%09%7D
-%0A%09
 %0A%0A%09publi
@@ -1318,34 +1318,32 @@
 t(%22what%22, arr);%0A
-%09%09
 %0A%09%7D%0A%0A%09private vo
@@ -1482,26 +1482,24 @@
 how%22, arr);%0A
-%09%09
 %0A%09%7D%0A%0A%09privat
@@ -1654,15 +1654,12 @@
 r);%0A
-%09%09
 %0A%09%7D%0A
-%09
 %0A%09/*
@@ -2867,16 +2867,55 @@
 ements)%0A
+%09%09%09if (!element.equalsIgnoreCase(%22%22))%0A%09
 %09%09%09arr.p

Fix empty array bug on tag generation