package com.fitbank.web;

import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import com.fitbank.dto.management.Detail;
import com.fitbank.dto.management.Field;
import com.fitbank.dto.management.Record;
import com.fitbank.dto.management.Table;


public class JSONData {
//	private static final String QUERY_CTL="__QUERY";
//	private static final String TABLE_CTL="__TABLE";
//	private static final String ID_CTL="__ID";
	@SuppressWarnings("unused")
	private HttpServletRequest request;
	//private Map<String,Object> param;
	private String identifier="code";
    private Detail detail;
    private String query;
    private String table="lov";
    private Map<String, String> parameters = new HashMap<String, String>();
	@SuppressWarnings("unchecked")
	public JSONData(HttpServletRequest pRequest) throws Exception {
		request = pRequest;
		query=request.getParameter("_query");
		identifier=request.getParameter("_identifier");
	//	param=new HashMap<String, Object>();
		Enumeration<String> param = request.getParameterNames();
		while (param.hasMoreElements()) {
			String paramName = param.nextElement();	
			
			if (paramName.indexOf("cLov_") < 0&&paramName.indexOf("pLov_") < 0) {
				continue;
			}
			String val = request.getParameter(paramName).trim();
			if (val.compareTo("_") == 0) {
				val = "";
			}
			
			paramName = paramName.replaceAll("cLov_", "");
			paramName = paramName.replaceAll("pLov_", "");
			parameters.put(paramName, val);
		}
		DataManage dm = (DataManage) request.getSession().getAttribute(DataManage.KEY);
		detail = new Detail();     
             
        	detail.setType(MessageTypes.CON.name());
      		detail.setSubsystem("03");
      		detail.setTransaction("7003");
      		detail.setVersion("01");
      		dm.prepareHeaderData(detail,this.request);
      		detail.findFieldByNameCreate("NAME").setValue(query);
      		for (String key : this.parameters.keySet()) {
      			detail.findFieldByNameCreate(key).setValue(this.parameters.get(key));
      		}

                BussinessDelegate bd=new BussinessDelegate();
                this.detail=bd.process(detail);
	}
	public JSONData(Map<String,Object>pParam){
	}

	@SuppressWarnings("unchecked")
	public String getJsonData() throws Exception {
		 Table lov= detail.findTableByAlias(table);
		return this.formatData(lov.getRecords());
	}
    private String formatData(Iterable<Record> pData){
       String data="{identifier:\""+identifier+"\",";
       data+="items: [";
       boolean first=true;
       for (Record record : pData) {
    	   if(first){
    		   first=false;
    	   }else{
    		   data+=",";
    	   }
		data+="{";
		data+=this.record2Jason(record);
		data+="}";
	}
       return data+"]}";
    }
    private String record2Jason(Record pRecord){
    	String data="";
    	boolean first=true;
    	for(String key:pRecord.keySet()){
    		if(first){
     		   first=false;
     	   }else{
     		   data+=",";
     	   }
    		data+=key+":\""+((Field)pRecord.get(key)).getValue()+"\"";
    	}
    	return data;
    }
 

}
