package com.fitbank.web;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpSession;

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 MenuLoader {

	private DataManage dm;

	private ServletRequest request;

	private HttpSession session;

	private String context = "";

	public MenuLoader(DataManage pDM, ServletRequest pRequest, HttpSession pSession) {
		this.dm = pDM;
		this.request = pRequest;
		this.session = pSession;
		this.context = (String) this.dm.getHttpSession().getAttribute("u_site");
		if (this.context == null) {
			this.context = "";
		}
	}

	public String getSubMenu() throws Exception {
		try {
			/*
			 * String menuitem = this.request.getParameter("menuitem"); String
			 * subsystem = this.request.getParameter("subsystem"); String level =
			 * this.request.getParameter("level");
			 */
			String menuitem = (String) this.session.getAttribute("_mmenuitem");
			String subsystem = (String) this.session.getAttribute("_msubsystem");
			String level = (String) this.session.getAttribute("_mLevel");
			// System.out.println("Sub MEnu " + menuitem + " " + subsystem + " " +
			// level);
			Detail detail = new Detail();
			this.dm.prepareHeaderData(detail, this.request);
			detail.setSubsystem("01");
			detail.setTransaction("0001");
			detail.setVersion("01");
			detail.setType(MessageTypes.SIG.name());

			detail.findFieldByNameCreate("MENUITEM").setValue(menuitem);
			detail.findFieldByNameCreate("SUBSISTEMA").setValue(subsystem);
			detail.findFieldByNameCreate("NIVEL").setValue(level);
			detail.findFieldByNameCreate("_SUBMENU_").setValue("1");
			try {
				BussinessDelegate bd = new BussinessDelegate();
				detail = bd.process(detail);
			} catch (Exception ex) {
				;
			}
			this.session.setAttribute("_submenuD", detail);
			Table table = detail.findTableByName("TOOLBAR");
			if (table == null) {
				return "";
			}
			String items = "var menuItems = [\n";
			for (Record record : table.getRecords()) {
				String code = (String) record.findFieldByNameCreate("CODE").getValue();
				String name = (String) record.findFieldByNameCreate("NAME").getValue();
				String page = (String) record.findFieldByNameCreate("PAGE").getValue();
				String base = (String) record.findFieldByNameCreate("BASE").getValue();
				String param = "";
				if ((menuitem != null) && (subsystem == null) && (level == null)) {
					param = "menuitem=" + menuitem + "&subsystem=" + code;
					items += "[\"" + code + " " + name + "\",\"\",,,,,,,\"" + this.context + "/jsp/menu.jsp?" + param + "\",],\n";
				} else if ((menuitem != null) && (subsystem != null) && (level == null)) {
					param = "menuitem=" + menuitem + "&subsystem=" + subsystem + "&level=" + code;
					items += "[\"" + name + "\",\"\",,,,,,,\"" + this.context + "/jsp/menu.jsp?" + param + "\",],\n";
				} else if ((menuitem != null) && (subsystem != null) && (level != null)) {
					param = code;
					items += "[\"" + code + " " + name + "\",\"javascript:top.showPage('" + page + "','" + base + "','" + subsystem + "','" + code + "');\"],\n";
				}
			}
			items = items + "];";
			return items;
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}
	}

	public Detail query() throws Exception {
		Detail det = new Detail();
		this.dm.prepareHeaderData(det, this.request);
		det.setSubsystem("01");
		det.setTransaction("0001");
		det.setVersion("01");
		det.setType(MessageTypes.SIG.name());
		BussinessDelegate bd = new BussinessDelegate();
		Detail detail = bd.process(det);
		Field menu = detail.findFieldByNameCreate("MENU");
		String value = "" + menu.getValue();
		value = value.replaceAll("jsp\\/menu.jsp", "\\" + this.context + "\\/" + "jsp\\/menu.jsp");
		detail.addTable(this.transformMenu(value));
		menu.setValue(value);
		return detail;
	}

	private Table transformMenu(String pData) throws Exception {
		String menu[] = pData.split("\\]");
		pData = "";
		for (String str : menu) {
			if (str.indexOf(",,,,,,,") < 0) {
				continue;
			}
			pData += str.replaceAll("\"", "");
		}
		menu = pData.split("\\[");
		Table tbl = new Table("menudata", "menudata");
		for (String str : menu) {
			if (str.indexOf(",,,,,,,") < 0) {
				continue;
			}
			String[] tmp = str.split(",");
			String[] tmp1 = tmp[8].split("=");
			Record rec = new Record();
			rec.findFieldByNameCreate("DES").setValue(tmp[0]);
			rec.findFieldByNameCreate("SUB").setValue(tmp1[1]);
			tbl.addRecord(rec);
		}
		return tbl;
	}
}
