package com.rjconsultores.ventaboletos.utilerias.exportacao.bpe.xml;

import org.json.JSONObject;
import org.json.XML;

import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;

public class BpeBuscaCamposXml {

	private static BpeBuscaCamposXml instance = null;
	private String json;

	protected BpeBuscaCamposXml(String xml) {
		controiJson(xml);
	}

	public static BpeBuscaCamposXml getInstance(String xml) {
		if (instance == null) {
			instance = new BpeBuscaCamposXml(xml);
		}
		return instance;
	}

	private void controiJson(String xml) {
		if (xml != null) {
			try {
				JSONObject xmlJSONObj = XML.toJSONObject(xml);
				this.json = xmlJSONObj.toString(4);
			} catch (Exception je) {
				je.printStackTrace();
			}
		}
	}

	public String buscaCamposXml(String campo) {
		try {

			JsonElement root = new JsonParser().parse(json);
			String resp = null;
			if (campo.equals("CST"))
				resp = root.getAsJsonObject().get("BPe").getAsJsonObject().get("infBPe").getAsJsonObject().get("imp")
						.getAsJsonObject().get("ICMS").getAsJsonObject().get("ICMS00").getAsJsonObject().get("CST").toString();
			if (campo.equals("pICMS"))
				resp = root.getAsJsonObject().get("BPe").getAsJsonObject().get("infBPe").getAsJsonObject().get("imp")
						.getAsJsonObject().get("ICMS").getAsJsonObject().get("ICMS00").getAsJsonObject().get("pICMS").toString();
			if (campo.equals("vICMS"))
				resp = root.getAsJsonObject().get("BPe").getAsJsonObject().get("infBPe").getAsJsonObject().get("imp")
						.getAsJsonObject().get("ICMS").getAsJsonObject().get("ICMS00").getAsJsonObject().get("vICMS").toString();
			if (campo.equals("vBC"))
				resp = root.getAsJsonObject().get("BPe").getAsJsonObject().get("infBPe").getAsJsonObject().get("imp")
						.getAsJsonObject().get("ICMS").getAsJsonObject().get("ICMS00").getAsJsonObject().get("vBC").toString();
			if (campo.equals("UFIni"))
				resp = root.getAsJsonObject().get("BPe").getAsJsonObject().get("infBPe").getAsJsonObject().get("ide")
						.getAsJsonObject().get("UFIni").toString();
			if (campo.equals("vBP"))
				resp = root.getAsJsonObject().get("BPe").getAsJsonObject().get("infBPe").getAsJsonObject().get("infValorBPe")
						.getAsJsonObject().get("vBP").toString();

			resp = resp.replace("\"", "");
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	public String[] buscaCamposXmlArray(String campo) {
		try {
			JsonElement root = new JsonParser().parse(json);
			JsonArray array = null;

			array = root.getAsJsonObject().get("BPe").getAsJsonObject().get("infBPe").getAsJsonObject().get("infValorBPe")
					.getAsJsonObject().get("Comp").getAsJsonArray();

			if (campo.equals("tpComp")) {
				String[] a = new String[array.size()];
				int cont = 0;
				for (JsonElement jsonElement : array) {
					String aux = jsonElement.getAsJsonObject().get("tpComp").toString();
					aux = aux.replace("\"", "");
					a[cont] = aux;
					cont++;
				}
				return a;
			}

			if (campo.equals("vComp")) {
				String[] a = new String[array.size()];
				int cont = 0;
				for (JsonElement jsonElement : array) {
					String aux = jsonElement.getAsJsonObject().get("vComp").toString();
					aux = aux.replace("\"", "");
					a[cont] = aux;
					cont++;
				}
				return a;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;

	}
}
