package com.apelon.modules.dts.editor.templateeditor;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashMap;

import javax.swing.JComponent;
import javax.swing.JDialog;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPanel;

import com.apelon.apps.dts.editor.modules.DTSEditorConfig;
import com.apelon.apps.dts.editor.modules.DTSEditorModuleMgr;
import com.apelon.beans.dts.plugin.connection.DtsConnectionListener;
import com.apelon.modules.dts.editor.plugin.AbstractModuleManager;

/**
 * Template text file for a DTSModuleManager interface. The following parameters will be replaced:
 * %1 module name
 * %2 module version
 * %3 panel type (if any)
 * %4 menu name of module menu (if any)
 * <p>
 * Copyright (c) 2014 Apelon, Inc. All rights reserved.
 * @since 4.2.0
 * @version 4.2.0
 */
public class TemplateModuleManager extends AbstractModuleManager implements DtsConnectionListener  {
	
	private final static String P1 = "%1";		//module name
	private final static String P2 = "%2";		//module version
	private final static String P3 = "%3";		//plug-in panel position
	private final static String P4 = "%4";		//module menu name
	private final static int P5 = %5;			//module year
        
    public TemplateModuleManager() {
    	super(P1, P2);
        System.out.println (P1+"."+P2);
    }

    /**
     * This method is called by DTS Editor to initialize the module.
     * @param mgr DTSEditorModuleMgr
     */
    public void initModule(DTSEditorModuleMgr mgr, UsageType usage) {
    	super.initModule(mgr, usage);
        if (usage==UsageType.PLUGIN) initModulePanels();
    }
         
    //add the panel in PLUGIN mode
    private void initModulePanels() {
    	if (P3.equalsIgnoreCase(TemplatePublishPanel.RIGHT))
    		moduleMgr.getRightTabbedPane().add(P1, getModulePanel(moduleMgr));
        else if (P3.equalsIgnoreCase(TemplatePublishPanel.LEFT))
            moduleMgr.getLeftTabbedPane().add(P1, getModulePanel(moduleMgr));
    }
         
    /** Implements <code>DTSEditorModuleManager.getModuleComponent(name, options)</code>.
     * Return the JComponent associated with the module's component name. 
     */
    public JComponent getModuleComponent(String name, HashMap<String,String> options) {
    	return getModulePanel(moduleMgr);
    }
    
    public boolean isToolbarComponent() { return false; }

    //menu stuff
    protected JMenu[] getPluginMenus() { return null; }			//required
    
    /** get the items for an arbitrary layout menu */
   @Override
    protected JMenuItem[] getMenuItems(String menuName) {
		return new JMenuItem[] { getSelectMenuItem() };
    }
    
    /** Get an array of <code>JMenuItems</code> for the named menu. */
   @Override
    protected JMenuItem[] getFileMenuItems() {
	   if (P4.equalsIgnoreCase(TemplatePublishPanel.FILE))
	    	return new JMenuItem[] { getSelectMenuItem() };
	   return new JMenuItem[0];
   }

   @Override
    protected JMenuItem[] getToolMenuItems() {
 	   if (P4.equalsIgnoreCase(TemplatePublishPanel.TOOLS))
 		   return new JMenuItem[] { getSelectMenuItem() };
		return new JMenuItem[0];
	}

    @Override
    protected JMenuItem[] getOptionsMenuItems() {
  	   if (P4.equalsIgnoreCase(TemplatePublishPanel.OPTIONS))
	    	return new JMenuItem[] { getSelectMenuItem() };
  	   return new JMenuItem[0];
    }
    
    private JMenuItem getSelectMenuItem() {
		return buildMenuItem(P1+"MenuItem", "New "+P1, "Open new "+P1, 
    			new ActionListener() {
		    		public void actionPerformed(ActionEvent ae) {
		    			moduleSelected(ae);
		    		}
		    	});
    }
    
	@Override
	protected JMenuItem[] getHelpMenuItems() {
		return new JMenuItem[] { 
	    	 	buildMenuItem(P1+"AboutItem", "About "+P1, "Show about "+P1, 
	    	 		new ActionListener() {
	    	 			public void actionPerformed(ActionEvent ae) {
	                        showAboutPanel(P1, P2, P5);
	                    }
		    		}
		    	) };
	}

     /**************************************************************/
    
    /** open as floating panel */
    private void moduleSelected(ActionEvent ae) {
    	showFloatingPanel(getModulePanel(moduleMgr), 0, 0, JDialog.DO_NOTHING_ON_CLOSE);
    }
    
    private JPanel getModulePanel(DTSEditorModuleMgr moduleMgr) {
    	return new TemplateModulePanel(moduleMgr, P1);
    }

}
