package _VisualDVM.Visual.Menus.MainMenuBar;
import Common.Passes.Pass;
import Common.Visual.Controls.MenuBarButton;
import Common.Visual.Fonts.VisualiserFonts;
import Common.Visual.Menus.VisualiserMenuBar;
import Common.Visual.UI;
import _VisualDVM.ComponentsServer.Component.PerformanceAnalyzer.PerformanceAnalyzer;
import _VisualDVM.Global;
import _VisualDVM.GlobalData.Compiler.Compiler;
import _VisualDVM.GlobalData.Machine.Machine;
import _VisualDVM.GlobalData.User.User;
import _VisualDVM.Passes.PassCode;
import _VisualDVM.Visual.Menus.MainMenuBar.VisualiserSettingsMenu.VisualiserSettingsMenu;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.LinkedHashMap;
public class MainMenuBar extends VisualiserMenuBar {
    public MenuBarButton MachineButton;
    public MenuBarButton UserButton;
    public MenuBarButton CompilerButton;
    JMenu analyses;
    JMenu transformations;
    MenuBarButton componentsButton;
    ActionListener credentialsListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Global.mainModule.getUI().getMainWindow().FocusCredentials();
        }
    };
    public MainMenuBar() {
        addMenus(new LastOpenedProjectsMenu());
        addPasses(PassCode.OpenCurrentProject, PassCode.CreateEmptyProject);
        addMenus(
                analyses = new AnalysesMenu(),
                transformations = new TransformationsMenu(),
                new GlobalCleaningMenu(),
                new VisualiserSettingsMenu()
        );
        add(componentsButton = new MenuBarButton() {
            {
                setToolTipText("Компоненты");
                setIcon("/icons/ComponentsActual.png");
                addActionListener(e -> {
                    if (PerformanceAnalyzer.isActive) {
                        UI.Info("Перед работой с компонентами закройте анализатор производительности!");
                    } else {
                        Global.mainModule.getPass(PassCode.GetComponentsActualVersions).Do();
                        Global.components.refreshUpdatesStatus();
                        Global.mainModule.getUI().getComponentsWindow().ShowDialog("");
                    }
                });
            }
        });
        /*
        add(new MenuBarButton() {
            {
                setIcon("/icons/Comparsion.png");
                setToolTipText("Анализатор статистик");
                addActionListener(e -> {
                    Global.performanceAnalyzer.Start();
                });
            }
        });
         */
        addPasses(PassCode.ShowInstruction);
        //- javafx
        LinkedHashMap<Integer, Integer> test = new LinkedHashMap<>();
        setPreferredSize(new Dimension(0, 30));
        //--

/*
        add(new MenuBarButton() {
            {
                setIcon("/Common/icons/Apply.png");
                setToolTipText("Test");
                addActionListener(e -> {
                    Global.mainModule.getPass(PassCode.TestPass).Do();
                });
            }
        });
 */
        //--
        add(new JSeparator());
        add(MachineButton = new MenuBarButton() {
            {
                setIcon("/icons/Machine.png");
                setFont(VisualiserFonts.TreeBold);
                setToolTipText("Текущая машина");
            }
        });
        //--
        add(UserButton = new MenuBarButton() {
            {
                setIcon("/icons/User.png");
                setFont(VisualiserFonts.TreeBold);
                setToolTipText("Текущий пользователь");
            }
        });
        add(CompilerButton = new MenuBarButton() {
            {
                setIcon("/icons/type.png");
                setFont(VisualiserFonts.TreeBold);
                setToolTipText("Текущий компилятор");
            }
        });
        MachineButton.addActionListener(credentialsListener);
        UserButton.addActionListener(credentialsListener);
        CompilerButton.addActionListener(credentialsListener);
        ShowProject(false);
    }
    public void ShowUpdatesIcon() {
        componentsButton.setIcon(Global.components.getButtonIconPath());
    }
    public void ShowProject(boolean flag) {
        analyses.setEnabled(flag);
        transformations.setEnabled(flag);
        Pass[] cleaningPasses = new Pass[]{
                Global.mainModule.getPass(PassCode.DropAnalyses),
                Global.mainModule.getPass(PassCode.DropSavedArrays),
                Global.mainModule.getPass(PassCode.CleanAnalyses),
                Global.mainModule.getPass(PassCode.DeleteDebugResults),
                Global.mainModule.getPass(PassCode.ResetCurrentProject)
        };
        for (Pass pass : cleaningPasses) {
            pass.setControlsEnabled(flag);
        }
    }
    public void ShowMachine(Machine machine) {
        MachineButton.setText(machine.getURL());
    }
    public void ShowUser(User user) {
        UserButton.setText(user.login);
    }
    public void ShowCompiler(Compiler compiler) {
        CompilerButton.setText(compiler.description);
    }
    public void ShowNoMachine() {
        MachineButton.setText("?");
    }
    public void ShowNoUser() {
        UserButton.setText("?");
    }
    public void ShowNoCompiler() {
        CompilerButton.setText("?");
    }
}
