import model.LineModel;
import org.opencv.core.Core;
import presenter.Presenter;
import presenter.evaluation.PictureProcessor;
import view.MainFrame;

import javax.swing.*;
import java.awt.*;
import java.lang.reflect.InvocationTargetException;

/**
 * Implementierung verschiedener Algorithmen zur Berechnung von Ausgleichsgeraden.
 *
 * @Author: Armin Wolf
 * @Email: a_wolf28@uni-muenster.de
 * @Date: 28.05.2017.
 */
public class App {

    static {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}

    private static void setUIFont(javax.swing.plaf.FontUIResource f) {
        java.util.Enumeration<Object> keys = UIManager.getDefaults().keys();
        while (keys.hasMoreElements()) {
            Object key = keys.nextElement();
            Object value = UIManager.get(key);
            if (value instanceof javax.swing.plaf.FontUIResource) {
                UIManager.put(key, f);
            }
        }
    }

    private static void setLookAndFeel(JFrame view) {
        String[] laf = {"com.jtattoo.plaf.aluminium.AluminiumLookAndFeel",
                        "com.jtattoo.plaf.acryl.AcrylLookAndFeel",
                        "com.jtattoo.plaf.aero.AeroLookAndFeel",
                        "com.jtattoo.plaf.fast.FastLookAndFeel",
                        "com.jtattoo.plaf.graphite.GraphiteLookAndFeel"};
        try {
            UIManager.setLookAndFeel(laf[4]);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (UnsupportedLookAndFeelException e) {
            e.printStackTrace();
        }
        SwingUtilities.updateComponentTreeUI(view);
    }

    public static void main(String[] args) {

        final Presenter presenter = new Presenter(new LineModel(), null);

        SwingUtilities.invokeLater(() -> {
            JFrame.setDefaultLookAndFeelDecorated(true);
            MainFrame view = new MainFrame();
            setLookAndFeel(view);
            setUIFont(new javax.swing.plaf.FontUIResource(new Font("Verdana", Font.PLAIN, 12)));
            view.setPresenter(presenter);
            view.setActionListeners();
            presenter.setView(view);
        });

    }

}
