package org.orienteer.core.widget.support.jquery;

import org.apache.wicket.AttributeModifier;
import org.apache.wicket.ajax.AjaxRequestTarget;
import org.apache.wicket.request.resource.CssResourceReference;
import org.orienteer.core.module.OWidgetsModule;
import org.orienteer.core.widget.AbstractWidget;
import org.orienteer.core.widget.DashboardPanel;
import org.orienteer.core.widget.support.IDashboardSupport;
import com.orientechnologies.orient.core.record.impl.ODocument;

import de.agilecoders.wicket.webjars.request.resource.WebjarsJavaScriptResourceReference;

/**
 * {@link IDashboardSupport} for Jquery UI
 */
public class JQueryDashboardSupport implements IDashboardSupport {
	public final static WebjarsJavaScriptResourceReference JQUERY_UI_JS = new WebjarsJavaScriptResourceReference("/jquery-ui/current/jquery-ui.min.js");
	final static CssResourceReference WIDGET_CSS = new CssResourceReference(JQueryDashboardSupport.class, "widget.css");
	
	@Override
	public void initDashboardPanel(DashboardPanel<?> dashboard) {
		dashboard.add(new JQueryDashboardAjaxBehavior());
	}

	@Override
	public void initWidget(AbstractWidget<?> widget) {
		//NOP
	}

	@Override
	public void ajaxAddWidget(AbstractWidget<?> widget, AjaxRequestTarget target) {
		DashboardPanel<?> dashboard = widget.getDashboardPanel();
		target.prependJavaScript("$('#"+dashboard.getMarkupId()+" > ul').append('<li id=\\'"+widget.getMarkupId()+"\\'></li>')");
		target.add(widget);
	}

	@Override
	public void ajaxDeleteWidget(AbstractWidget<?> widget,
			AjaxRequestTarget target) {
		target.prependJavaScript("$('#"+widget.getMarkupId()+"').remove();");
	}

	@Override
	public void saveSettings(AbstractWidget<?> widget, ODocument doc) {
		//NOP
	}

	@Override
	public void loadSettings(AbstractWidget<?> widget, ODocument doc) {
		Object width = widget.getWidgetDocument().field(OWidgetsModule.OPROPERTY_SIZE_X);
		Object height = widget.getWidgetDocument().field(OWidgetsModule.OPROPERTY_SIZE_Y);
		if (width!=null){
			widget.add(AttributeModifier.append("style", "min-width:"+(Integer)width+"px;"));
		}
		if (height!=null){
			widget.add(AttributeModifier.append("style", "min-height:"+(Integer)height+"px;"));
		}
	}

}