package com.eactive.eai.adapter.jtc;

public class TuxBufferConverter {
	private static boolean DEBUG = true;

	//--------------------------------------------------------------------
	// TODO : table class 로 변경해야 함.
	//--------------------------------------------------------------------
	// java -cp ..\webtJtc.jar tmax.webt.util.TuxFieldGen -32 com.eactive.eai.adapter.jtc FieldTable
//	private static ConcurrentHashMap<String, Integer> keyMap = new ConcurrentHashMap<String, Integer>();
//	private static ConcurrentHashMap<Integer, String> nameMap = new ConcurrentHashMap<Integer, String>();
//	static {
//		keyMap.put("STRING1", 167772461);
//		keyMap.put("STRING2", 167772462);
//		keyMap.put("LONG1", 33554933);
//		
//		nameMap.put(167772461, "STRING1");
//		nameMap.put(167772462, "STRING2");
//		nameMap.put(33554933, "LONG1");
//	}
	
//	private static FmlTable table = new FmlTable();
//	
//	public static int getFldKeyFromFieldName(String fieldName) {
//		int fldKey = -1;
//		try {
//			
////			fldKey = keyMap.get(fieldName);
//			fldKey = table.getFieldId(fieldName);
//		}
//		catch(Exception e) {
//			printLog("Invalid Field Name - " + fieldName);
//		}
//		return fldKey;
//	}
//
//	public static String getFieldNameFromFldKey(int fldKey) {
//		String fieldName = "UNKNOWN";
//		try {
////			fieldName = nameMap.get(fldKey);
//			
//			fieldName = table.getFieldName(fldKey);
//		}
//		catch(Exception e) {
//			printLog("Invalid Field Key - " + fldKey);
//		}
//		return fieldName;
//	}
//	//--------------------------------------------------------------------
//	
//	private static void setDebug(boolean debug) {
//		DEBUG = debug;
//	}
//	private static void printLog(String message) {
//		if(DEBUG) {
//			System.out.println(message);
//		}
//	}
//	
//	
//	public static TuxFieldBuffer setJsonArrayToFml(TuxFieldBuffer tuxBuffer, String fieldName, JSONArray jsonFieldArray) {
//		for(int i=0; i<jsonFieldArray.size();i++) {
//			Object arrayItem = jsonFieldArray.get(i);
//			if( (arrayItem instanceof JSONObject)) {
//				if(DEBUG) printLog(fieldName + " is JSONObject");
//			}
//			else if((arrayItem instanceof JSONArray) ) {
//				printLog(fieldName + " is JSONArray");
//			}
//			else {
//				int fldkey = getFldKeyFromFieldName(fieldName);
//				printLog(fieldName + " added Value - " + arrayItem);
//				tuxBuffer.createField(fldkey).add(arrayItem);				
//			}
//		}
//		return tuxBuffer;		
//	}
//	
//	public static TuxFieldBuffer jsonToTuxFieldBuffer(String json, boolean isFml32) {
//		TuxFieldBuffer tuxBuffer = new TuxFieldBuffer(isFml32); // FML 16임으로 false로
//		JSONObject fmlJson = (JSONObject)JSONValue.parse(json);
//		
//		JSONObject fml = (JSONObject)fmlJson.get("FML");
//		
//		Iterator i = fml.keySet().iterator();
//		while(i.hasNext()) {
//			String keys = (String)i.next();
//			Object obj = fml.get(keys);
//			if(obj instanceof JSONArray) {
//				printLog(keys + " is Array");
//				setJsonArrayToFml(tuxBuffer, keys, (JSONArray)obj);
//			}
//			else {
//				printLog(keys + " is Not Array");
//			}
//		}
//		
////		String value = "100";
////		tuxBuffer.createField(fldkey).add(value);
////		tuxBuffer.createField(167772462).add("101");
////		tuxBuffer.createField(fldkey).add(value);
//		return tuxBuffer;
//		
//	}
//	
//	public static String tuxFieldBufferToJson(TuxFieldBuffer tuxBuffer, boolean isFml32) {
//		// {"FML":{"STRING1":["100","100"],"STRING2":["101"]}}
//		JSONObject root = new JSONObject();
//		JSONObject message = new JSONObject();
//		root.put("FML", message);
//		
//		HashMap<Integer, String> fieldKeyMap = new HashMap<Integer, String>();
//		
//		// TODO : convert TuxFieldBuffer to Json 
//		TuxFieldTable table = tuxBuffer.getFieldTable();
//		Vector fNamesVt = tuxBuffer.getFieldKeyNames();
//		if(fNamesVt == null) {
//			Iterator it = tuxBuffer.getAllElementsIterator();
//			int pos = 0;
//			
//			JSONArray jsonFieldArray = null;
//			
//			while(it.hasNext()) {
//				WebtFieldElement fieldElement = (WebtFieldElement)it.next();
//				WebtField f = fieldElement.getField();
//				printLog("Field [" + (pos++) + "]-> " + f);
//				
//				int fieldType = f.getFieldType();
//				
//				printLog("FieldKey : " + f.getFieldKey());
//				printLog("FieldType : " + f.getFieldType());
//				
//				
//				if(fieldKeyMap.containsKey(f.getFieldKey())) {
//					printLog("SKIP FieldKey : " + f.getFieldKey());
//					continue;
//				}
//
//				String fieldName = getFieldNameFromFldKey(f.getFieldKey());
//				
//				fieldKeyMap.put(f.getFieldKey(), fieldName);
//				
//				
//				Enumeration fe = f.getFieldEnumeration();
//				
//				StringBuffer buf = new StringBuffer();
//				
//				buf.append("data : ");
//				jsonFieldArray = (JSONArray)message.get(fieldName);
//				
//				if(jsonFieldArray == null) {
//					jsonFieldArray = new JSONArray();
//				}
//				while (fe.hasMoreElements()) {
//					WebtFieldElement e = (WebtFieldElement) fe.nextElement();
//					
//					if (e == null) {
//						buf.append("[]");
//					} else {
//						switch (fieldType) {
//							case 1 :
////								printLog(" >> byteValue : " + e.byteValue());
//								buf.append("[").append(e.byteValue()).append("]");
//								jsonFieldArray.add(e.byteValue()); 
//								break;
//							case 2 :
////								printLog(" >> WebtFieldElement : " + e.shortValue());
//								buf.append("[").append(e.shortValue()).append("]");
//								jsonFieldArray.add(e.shortValue());
//								break;
//							case 3 :
//							case 4 :
////								printLog(" >> intValue : " + e.intValue());
//								buf.append("[").append(e.intValue()).append("]");
//								jsonFieldArray.add(e.intValue());
//								break;
//							case 5 :
////								printLog(" >> floatValue : " + e.floatValue());
//								buf.append("[").append(e.floatValue()).append("]");
//								jsonFieldArray.add(e.floatValue());
//								break;
//							case 6 :
////								printLog(" >> doubleValue : " + e.doubleValue());
//								buf.append("[").append(e.doubleValue()).append("]");
//								jsonFieldArray.add(e.doubleValue());
//								break;
//							case 7 :
////								printLog(" >> stringValue : " + e.stringValue(f.getDefaultCharset()));
//								buf.append("[").append(e.stringValue(f.getDefaultCharset())).append("]");
//								jsonFieldArray.add(e.stringValue(f.getDefaultCharset()));
//								break;
//							case 8 :
////								printLog(" >> bytesValue : " + e.bytesValue());
//								buf.append("[").append(e.bytesValue()).append("]");
//								jsonFieldArray.add(e.bytesValue());
//								
//						}
//					}
//					message.put(fieldName, jsonFieldArray);
//				}
//				printLog("data : " + buf.toString());
//				
//			}
//		}
//		else {
//			for(int i=0; i<fNamesVt.size(); i++) {
//				String fName = (String)fNamesVt.get(i);
//				printLog(fName + " = " + tuxBuffer.getField(fName) );
//			}
//		}
//		return root.toJSONString();		
//	}
//	
//	public static void main(String[] args) {
//		setDebug(false);
//		String json = "{\"FML\":{\"STRING1\":[\"100\",\"100\"],\"STRING2\":[\"101\"],\"LONG1\":[101]}}";
//		
//		System.out.println("## Parsing Json to FML Start...\n JSON = \n"+ json);
//		TuxFieldBuffer buffer = jsonToTuxFieldBuffer(json, true);
//		System.out.println("TuxFieldBuffer = \n"+ buffer);
//		
//		System.out.println("\n## Parsing FML to Json Start...");
//		System.out.println("JSON : \n" + tuxFieldBufferToJson(buffer, true));		
//	}
}
