package userInterface;

import java.io.File;
import java.util.Locale;
import java.util.ResourceBundle;

import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.image.Image;
import javafx.stage.Stage;
import javafx.stage.WindowEvent;
import logger.FileOutputMode;
import logger.Logger;
import tools.AlertGenerator;
import tools.PathUtils;


public class Main extends Application
{
	@Override
	public void start(Stage stage)
	{
		try
		{			
			FXMLLoader loader = new FXMLLoader(getClass().getResource("userInterface.fxml"));
			Parent root = (Parent)loader.load();

			Scene scene = new Scene(root, 800, 800);
			scene.getStylesheets().add("/userInterface/application.css");
			stage.setMinHeight(500);
			stage.setMinWidth(700);
			stage.setResizable(true);
			stage.setTitle("SmartTime");
			stage.setScene(scene);
			
			UserInterfaceController controller = (UserInterfaceController)loader.getController();			
			controller.init(stage);

			stage.getIcons().add(new Image("/userInterface/icon.png"));
			stage.show();

			// fängt die Aufforderung das Fenster zu schließen ab, um vorher
			// noch eine Prüfung duchzuführen
			stage.setOnCloseRequest(new EventHandler<WindowEvent>()
			{
				public void handle(WindowEvent we)
				{
					if(controller.isTimerRunning())
					{
						AlertGenerator.showAlert(AlertType.WARNING, "Warnung", "", "Die Stoppuhr läuft noch!", new Image("/userInterface/icon.png"), stage, null, false);
						
						// "schluckt" die Aufforderung das Fenster zu schließen
						// (Fenster wird dadurch nicht geschlossen)
						we.consume();
					}
					else
					{
						stage.close();
					}
				}
			});
		}
		catch(Exception e)
		{
			Logger.error(e);
		}
	}
	
	@Override
	public void init() throws Exception
	{
		ResourceBundle bundle = ResourceBundle.getBundle("userInterface/", Locale.GERMANY);
		
		Parameters params = getParameters();
		String logLevelParam = params.getNamed().get("loglevel");		
		Logger.setLevel(logLevelParam);	
		
		File logFolder = new File(PathUtils.getOSindependentPath() + "/Deadlocker/" + bundle.getString("app.name"));			
		PathUtils.checkFolder(logFolder);
		Logger.enableFileOutput(logFolder, System.out, System.err, FileOutputMode.COMBINED);
		
		Logger.appInfo(bundle.getString("app.name"), bundle.getString("version.name"), bundle.getString("version.code"), bundle.getString("version.date"));		
	}
	
	public static void main(String[] args)
	{
		launch(args);
	}
}