/*
 * Tout ce qui concerne les menus
 */
package fr.free.cdmrail;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Menu {
	
	// Création du menu
	// Si un menu existe déjà on le supprime
	// pframe : la fenêtre qui contient le menu
	public static void SetMenu(JFrame pframe) {
		JMenuBar pmenuBar = new JMenuBar();
		JMenu [] ptheMenu = new JMenu[Menu.MENU_MAIN_FR.length];
		// Si un menu existe on le supprime
		if (pframe.getMenuBar() != null) {
			// Annule la barre de menu
			pframe.setMenuBar(null);
			// Valide l'effacement
			pframe.revalidate();
			// Maj l'affichage
			pframe.repaint();
		}
		// Les titres du menu
		if (Global.whichLanguage == Global.LANGUAGE_FR) {
			// Menu en Français
			for (byte lin = 0; lin < Menu.MENU_MAIN_FR.length; lin++) {
				// Titre du menu
				ptheMenu[lin] = new JMenu(Menu.MENU_MAIN_FR[lin]);
				// Les éléments du titre
				if (Menu.MENU_MAIN_ITEMS_FR[lin].length > 0) {
					SetMenuItems(lin, ptheMenu[lin]);
				}
				// Ajout du titre à la barre des menus
				pmenuBar.add(ptheMenu[lin]);
			}
		}
		else {
			// Menu en Anglais
			for (byte lin = 0; lin < Menu.MENU_MAIN_EN.length; lin++) {
				// Titre du menu
				ptheMenu[lin] = new JMenu(Menu.MENU_MAIN_EN[lin]);
				// Les éléments du titre
				if (Menu.MENU_MAIN_ITEMS_EN[lin].length > 0) {
					SetMenuItems(lin, ptheMenu[lin]);
				}
				// Ajout du titre à la barre des menus
				pmenuBar.add(ptheMenu[lin]);
			}
		}
		// Indique la barre de menu
		pframe.setJMenuBar(pmenuBar);
	}
	
	// Création des éléments d'un titre du menu
	// plin : l'index dans le tableau MENU_MAIN_ITEMS_XX de la ligne des éléments du titre ptheMenu
	// ptheMenu : titre de menu
	public static void SetMenuItems(byte plin, JMenu ptheMenu) {
		if (Global.whichLanguage == Global.LANGUAGE_FR) {
			// Eléments en Français
			for (byte col = 0; col < MENU_MAIN_ITEMS_FR[plin].length; col++ ) {
				// ID de l'élément
				int itemID = (plin+1) * MENU_ID + col * MENU_ITEM_ID;
				
				if (MENU_MAIN_ITEMS_FR[plin][col].equals("-")) {
					// C'est un séparateur
					ptheMenu.addSeparator();
				}
				else {
					// Elément standard
					if (MENU_MAIN_ITEMS_FR[plin][col].charAt(0)== '>') {
						// C'est sous-menu
						// On le crée comme un menu
						JMenu theItem = new JMenu(MENU_MAIN_ITEMS_FR[plin][col].substring(1));
						if (itemID == MENU_OPTIONS_LANGUE) {
							// C'est l'élément MENU_OPTIONS_LANGUE
							// On ajoute les éléments du menu MENU_OPTIONS_LANGUE
							JMenuItem theMenuItem = new JMenuItem("English");
							theItem.add(new JMenuItem("English"));
							// Définit l'action à effectuer
							theMenuItem.addActionListener(new ActionListener() {
								public void actionPerformed(ActionEvent event) {
									Event.GoActionFromMenuItem(MENU_OPTIONS_LANGUE_ENGLISH);								
								}
							});
							theItem.add(new JMenuItem("Français"));
							// Définit l'action à effectuer
							theMenuItem.addActionListener(new ActionListener() {
								public void actionPerformed(ActionEvent event) {
									Event.GoActionFromMenuItem(MENU_OPTIONS_LANGUE_FRENCH);								
								}
							});
						}
						// On l'ajoute au menu
						ptheMenu.add(theItem);
					}
					else {
						// On le crée comme un élément
						JMenuItem theItem = new JMenuItem(MENU_MAIN_ITEMS_FR[plin][col]);
						// Ajoute l'élément au menu
						ptheMenu.add(theItem = new JMenuItem(MENU_MAIN_ITEMS_FR[plin][col]));										
					}

				}			
			}
		}
		else {
			// Eléments en Anglais
			for (byte col = 0; col < MENU_MAIN_ITEMS_EN[plin].length; col++ ) {
				// ID de l'élément
				int itemID = (plin+1) * MENU_ID + col * MENU_ITEM_ID;
				
				if (MENU_MAIN_ITEMS_EN[plin][col].equals("-")) {
					// C'est un séparateur
					ptheMenu.addSeparator();
				}
				else {
					// Elément standard
					if (MENU_MAIN_ITEMS_EN[plin][col].charAt(0)== '>') {
						// C'est sous-menu
						// On le crée comme un menu
						JMenu theMenu = new JMenu(MENU_MAIN_ITEMS_EN[plin][col].substring(1));
						if (itemID == MENU_OPTIONS_LANGUE) {
							// C'est l'élément MENU_OPTIONS_LANGUE
							// On ajoute les éléments du menu MENU_OPTIONS_LANGUE
							JMenuItem theMenuItem = new JMenuItem("English");
							theMenu.add(theMenuItem);
							// Définit l'action à effectuer
							theMenuItem.addActionListener(new ActionListener() {
								public void actionPerformed(ActionEvent event) {
System.out.println("Action");
									Event.GoActionFromMenuItem(MENU_OPTIONS_LANGUE_ENGLISH);								
								}
							});
							theMenu.add(new JMenuItem("Français"));
							// Définit l'action à effectuer
							theMenuItem.addActionListener(new ActionListener() {
								public void actionPerformed(ActionEvent event) {
									Event.GoActionFromMenuItem(MENU_OPTIONS_LANGUE_FRENCH);								
								}
							});
						}
						// On l'ajoute au menu
						ptheMenu.add(theMenu);
					}
					else {
						// On le crée comme un élément
						JMenuItem theItem = new JMenuItem(MENU_MAIN_ITEMS_EN[plin][col]);
						// Ajoute l'élément au menu
						ptheMenu.add(theItem = new JMenuItem(MENU_MAIN_ITEMS_EN[plin][col]));										
					}

				}			
			}
		}
	}

	// ID de base
	public static final short MENU_ID = 1000;
	public static final short MENU_ITEM_ID = 50;
	public static final short MENU_ITEM_ITEM_ID = 1;
	
	// ID des titres des menus
	public static final short MENU_FILE = MENU_ID;
	public static final short MENU_EDIT = MENU_FILE + MENU_ID;
	public static final short MENU_VIEW = MENU_EDIT + MENU_ID;
	public static final short MENU_CONSISTS = MENU_VIEW + MENU_ID;
	public static final short MENU_CONFIGURATION = MENU_CONSISTS + MENU_ID;
	public static final short MENU_ROUTES = MENU_CONFIGURATION + MENU_ID;
	public static final short MENU_RUN = MENU_ROUTES + MENU_ID;
	public static final short MENU_INTERFACE = MENU_RUN + MENU_ID;
	public static final short MENU_OPTIONS = MENU_INTERFACE + MENU_ID;
	public static final short MENU_TOOLS = MENU_OPTIONS + MENU_ID;
	public static final short MENU_COMM = MENU_TOOLS + MENU_ID;
	public static final short MENU_WINDOW = MENU_COMM + MENU_ID;
	public static final short MENU_HELP = MENU_WINDOW + MENU_ID;
	public static final short MENU_OTHERS = MENU_HELP + MENU_ID;
	
	// ID des éléments du menu MENU_OPTIONS
	public static final short MENU_OPTIONS_LANGUE = MENU_OPTIONS;
	public static final short MENU_OPTIONS_ECHELLE = MENU_OPTIONS_LANGUE + MENU_ITEM_ID;
	public static final short MENU_OPTIONS_TRACK_CAT = MENU_OPTIONS_ECHELLE + MENU_ITEM_ID;
	public static final short MENU_OPTIONS_DIM = MENU_OPTIONS_TRACK_CAT + MENU_ITEM_ID;
	public static final short MENU_OPTIONS_DISPLAY = MENU_OPTIONS_DIM + MENU_ITEM_ID;
	public static final short MENU_OPTIONS_COLORS = MENU_OPTIONS_DISPLAY + MENU_ITEM_ID;
	public static final short MENU_OPTIONS_TRACK_COLORS = MENU_OPTIONS_COLORS + MENU_ITEM_ID;
	public static final short MENU_OPTIONS_SIMULATION = MENU_OPTIONS_TRACK_COLORS + MENU_ITEM_ID;
	public static final short MENU_OPTIONS_RUN = MENU_OPTIONS_SIMULATION + MENU_ITEM_ID;
	
	// ID des éléments du menu MENU_OPTIONS_LANGUE
	public static final short MENU_OPTIONS_LANGUE_ENGLISH = MENU_OPTIONS_LANGUE;
	public static final short MENU_OPTIONS_LANGUE_FRENCH = MENU_OPTIONS_LANGUE_ENGLISH + MENU_ITEM_ITEM_ID;
		
	// Titres des menus en Français
	public static final String[] MENU_MAIN_FR = {
		"Fichier/Réseau",
		"Edition/Réseau",
		"Affichage",
		"Trains",
		"Configuration",
		"Itinéraires",
		"Exécuter",
		"Interface",
		"Options",
		"Outils",
		"Comm./IP",
		"Fenêtre",
		"Aide",
		"..."
	};

	// Titres des menus en Anglais
	public static final String[] MENU_MAIN_EN = {
		"File/Layout",
		"Edit/Layout",
		"View",
		"Consists",
		"Configuration",
		"Routes",
		"Run",
		"Interface",
		"Options",
		"Tools",
		"Comm./IP",
		"Window",
		"Help",
		"..."
	};
	
	// Les éléments des titres en Français
	// Le caractère '>' en début de libellé indique un sous-menu
	public static final String[][] MENU_MAIN_ITEMS_FR = {
		{},
		{},
		{},
		{},
		{},
		{},
		{},
		{},
		{">Langue","-","Echelle","-","Catalogue de voies","-","Dimensions Min.","-","Affichage","-","Couleurs","Couleurs et options des voies","-",
			"Simulation","-","Run"},
		{},
		{},
		{},
		{},
		{}
	};
	
	// Les éléments de l'élément Options - Langue
	public static final String[] MENU_MAIN_ITEMS_OPTIONS = {"English", "Français"};
	
	// Les éléments des titres en Anglais
	// Le caractère '>' en début de libellé indique un sous-menu
	public static final String[][] MENU_MAIN_ITEMS_EN = {
		{},
		{},
		{},
		{},
		{},
		{},
		{},
		{},
		{">Langue","-","Echelle","-","TRack Catalog","-","Min. Dimensions","-","Display","-","Colors","Track colors and options","-",
			"Simulation","-","Run"},
		{},
		{},
		{},
		{},
		{}
	};
}
