package com.wxq.apsv.controller;

import java.awt.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;

import com.intellij.uiDesigner.core.GridConstraints;
import com.intellij.uiDesigner.core.GridLayoutManager;
import com.wxq.apsv.interfaces.TabController;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.wxq.apsv.model.*;
import com.wxq.apsv.utils.*;

public class MainController {
    private static final Logger logger = LoggerFactory.getLogger(MainController.class);

    private JPanel mainPanel;
    private JTabbedPane tabbedPane;

    private MainController() {
        this.InitView();
        this.InitListeners();
    }

    public static void Launch() {
        JFrame frame = new JFrame(MainController.class.toString());
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        frame.setBounds((int) (screenSize.width * 0.1), (int) (screenSize.height * 0.08), (int) (screenSize.width * 0.8), (int) (screenSize.height * 0.8));
        Dimension preferSize = new Dimension((int) (screenSize.width * 0.8), (int) (screenSize.height * 0.8));
        frame.setPreferredSize(preferSize);
        frame.setContentPane(new MainController().mainPanel);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        frame.setTitle(Constants.APP_NAME);
        frame.pack();
        frame.setVisible(true);
    }

    private void InitView() {
        mainPanel = new JPanel();
        mainPanel.setLayout(new GridLayoutManager(1, 1, new Insets(10, 0, 0, 0), -1, -1));

        tabbedPane = new JTabbedPane();
        mainPanel.add(tabbedPane, new GridConstraints(0, 0, 1, 1, 0, 3, 1|2, 1|2, null, new Dimension(200, 200), null, 0, false));

        // Add Tabs
        final JPanel configTaskPanel = new ConfigTaskController();
        final JPanel taskStatusPanel = new TaskDetailController();
        final JPanel settingPanel = new SettingController();
        final JPanel aboutPanel = new AboutController();
        tabbedPane.addTab("配置任务", configTaskPanel);
        tabbedPane.addTab("任务详细", taskStatusPanel);
        tabbedPane.addTab("设置", settingPanel);
        tabbedPane.addTab("关于", aboutPanel);
        tabbedPane.setSelectedIndex(Settings.getInstance().getCurrentTab().ordinal());
    }

    private void InitListeners() {
        // Tab 切换
        tabbedPane.addChangeListener((ChangeEvent e) -> {
            logger.debug(Integer.toString(tabbedPane.getSelectedIndex()));
            TabController tabController = (TabController)tabbedPane.getSelectedComponent();
            Settings.getInstance().setCurrentTab(tabController.getTabType());
        });
    }
}