package edu.calpoly.csc480.Corral.Main;

import java.awt.event.*;
import java.io.*;
import javax.swing.*;
import javax.swing.filechooser.*;

import edu.calpoly.csc480.Corral.Seer.*;

abstract public class BaseMain extends JFrame {
	public BaseMain() {
		super();
		
		seer = makeSeer();

		fileMenu = new FileMenu();
		toolsMenu = new ToolsMenu();
		helpMenu = new HelpMenu();
		
		seer.setOwner(this);
		fileMenu.setOwner(this);
		toolsMenu.setOwner(this);
		helpMenu.setOwner(this);

		makeFrame();
		makeMenus();
		
		updateTitle();
		
		pack();
	}
	
	public void exit() {
		dispose();
		System.exit(0);
	}
	
	final public BaseSeer getSeer()				{return seer;}
	
	public void seerResting() {
		menuBar.setEnabled(true);
	}
	
	public void seerRunning() {
		menuBar.setEnabled(false);
	}

	public void fileOpened(FileInputStream in) throws IOException {
		seer.areaOpened(in);
		toolsMenu.fileOpened();
		updateTitle();
	}

	public void fileClosed() {
		seer.areaClosed();
		toolsMenu.fileClosed();
		updateTitle();
	}
	
	protected FileMenu fileMenu;
	protected ToolsMenu toolsMenu;
	protected HelpMenu helpMenu;
	protected JMenuBar menuBar;
	
	protected BaseSeer seer;
	
	protected void makeFrame() {
		setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);

   	addWindowListener(new WindowAdapter() {
         public void windowClosing(WindowEvent evt) {
				exit();
			}
      });
		
		getContentPane().add(seer.getView());
	}
	
	protected void makeMenus() {
		menuBar = new JMenuBar();
		setJMenuBar(menuBar);

		menuBar.add(fileMenu);
		menuBar.add(toolsMenu);
		menuBar.add(helpMenu);
	}
	
	protected void updateTitle() {
		final String baseTitle = "The AI Corral";
		final String fileTitle = fileMenu.getFileName();
		setTitle(baseTitle + " [Area " + fileTitle + "]");
	}

	abstract protected BaseSeer makeSeer();
}