package examples.quickstart;

import java.util.ArrayList;

import net.sourceforge.tapestry_jsmenu.api.BasicJSCookMenuItem;
import net.sourceforge.tapestry_jsmenu.api.IJSCookMenuItem;
import net.sourceforge.tapestry_jsmenu.api.IStatusMessageProvider;

import org.apache.tapestry.IRequestCycle;
import org.apache.tapestry.annotations.Persist;
import org.apache.tapestry.event.PageBeginRenderListener;
import org.apache.tapestry.event.PageEvent;
import org.apache.tapestry.html.BasePage;


public abstract class QuickStart extends BasePage implements PageBeginRenderListener{

  private ArrayList<IJSCookMenuItem> model = null;

  /**
   * The menu model provided by the java code 
   * must be an instance of Iterable<IJSCookMenuItem>
   */
  public Iterable<IJSCookMenuItem> getMenuModel(){
    return model;
  }
  
  /**
   * The 'menuItem' property referenced in the bindings. It provides the actual
   * rendered item of the model 
   */
  public abstract IJSCookMenuItem getMenuItem();
  
  /**
   * construct a static model
   */
  public void pageBeginRender(PageEvent arg0) {
    if(model == null){ 
      model = new ArrayList<IJSCookMenuItem>();
      //add a menu item with the name 'Continents', and a mouse over icon 
      BasicJSCookMenuItem continents = new BasicJSCookMenuItem("Continents", null, getAsset("world"));
      model.add(continents);
          //add some child menu items each one with a constant icon
          continents.addItem(new BasicJSCookMenuItem("Africa", getAsset("dot")));
          continents.addItem(new BasicJSCookMenuItem("North America", getAsset("dot")));
          continents.addItem(new BasicJSCookMenuItem("South America", getAsset("dot")));
          continents.addItem(new BasicJSCookMenuItem("Europe",getAsset("dot")));
          continents.addItem(new BasicJSCookMenuItem("Asia", getAsset("dot")));
          continents.addItem(new BasicJSCookMenuItem("Antarctica", getAsset("dot")));
          continents.addItem(new BasicJSCookMenuItem("Australia", getAsset("dot")));
      
        BasicJSCookMenuItem food = new BasicJSCookMenuItem("Food", getAsset("glass"));    
      model.add(food);
          BasicJSCookMenuItem fastFood = new BasicJSCookMenuItem("Fast Food", getAsset("fastfood"));  
          food.addItem(fastFood);
             fastFood.addItem(new BasicJSCookMenuItem("Hamburger"));
             fastFood.addItem(new BasicJSCookMenuItem("Pizza"));
             fastFood.addItem(new BasicJSCookMenuItem("Hot Dog"));     
          food.addItem(new BasicJSCookMenuItem("Ham & Eggs"));
          food.addItem(new BasicJSCookMenuItem("Vegetables"));
          //the fish-icon appears only on mouse over 
          food.addItem(new BasicJSCookMenuItem("Fish", null, getAsset("fish")));
          food.addItem(new BasicJSCookMenuItem("Steak"));
          //add a menu separator
          food.addItem(IJSCookMenuItem.MENU_SEPARATOR);
          food.addItem(new BasicJSCookMenuItem("How To"));
          food.addItem(new BasicJSCookMenuItem("Eat Outside"));
          food.addItem(new BasicJSCookMenuItem("Weight-Watchers!"));
                    
          
      model.add(IJSCookMenuItem.MENU_SEPARATOR);       
      
      model.add(new BasicJSCookMenuItem("Watches"));
      model.add(new BasicJSCookMenuItem("Bracelets"));
      model.add(new BasicJSCookMenuItem("Toys"));
      model.add(new BasicJSCookMenuItem("Hats"));
      model.add(new BasicJSCookMenuItem("Books",getAsset("book")));
      
      model.add(IJSCookMenuItem.MENU_SEPARATOR);       
      
      model.add(new BasicJSCookMenuItem("Margret"));
      model.add(new BasicJSCookMenuItem("Linda"));
      model.add(new BasicJSCookMenuItem("Patricia"));
      
      model.add(IJSCookMenuItem.MENU_SEPARATOR);       
      
      
      BasicJSCookMenuItem authors = new BasicJSCookMenuItem("Music");    
      model.add(authors);
          authors.addItem(new BasicJSCookMenuItem("R&B"));
          authors.addItem(new BasicJSCookMenuItem("Classics"));
          authors.addItem(new BasicJSCookMenuItem("Swing"));
          authors.addItem(new BasicJSCookMenuItem("Soul"));
          authors.addItem(new BasicJSCookMenuItem("Folk"));
    }
  }
  
  /**
   * This is called when one of the menu items is clicked
   */
  public void onNavigate(IRequestCycle cycle, String value){
    System.out.println("navigating from menuitem " + value );
  }
  

}