package _VisualDVM.ComponentsServer.Component.UI;
import Common.Database.Tables.DataSet;
import Common.MainModule_;
import Common.Visual.DataSetControlForm;
import Common.Visual.Fonts.VisualiserFonts;
import Common.Visual.Menus.DataMenuBar;
import Common.Visual.Menus.VisualiserMenu;
import Common.Visual.Tables.ColumnInfo;
import Common.Visual.Tables.RendererMaskedNanInteger;
import Common.Visual.Tables.RendererStatusEnum;
import _VisualDVM.ComponentsServer.Component.Component;
import _VisualDVM.Global;
import _VisualDVM.Passes.PassCode;

import javax.swing.*;
import java.util.Vector;
public class ComponentsForm extends DataSetControlForm<Component> {
    public ComponentsForm(DataSet<?, Component> dataSource_in, JPanel mountPanel_in) {
        super(dataSource_in, mountPanel_in);
    }
    @Override
    protected void createColumns() {
        AddColumns(
                new ColumnInfo<Component>("Компонент") {
                    @Override
                    public Object getFieldAt(Component object) {
                        return object.getComponentType().getDescription();
                    }
                },
                new ColumnInfo<Component>("Текущая версия") {
                    @Override
                    public Object getFieldAt(Component object) {
                        return object.version;
                    }
                    @Override
                    public Class getRendererClass() {
                        return RendererMaskedNanInteger.class;
                    }
                },
                new ColumnInfo<Component>("Актуальная версия") {
                    @Override
                    public Object getFieldAt(Component object) {
                        return object.actual_version;
                    }
                    @Override
                    public Class getRendererClass() {
                        return RendererMaskedNanInteger.class;
                    }
                },
                new ColumnInfo<Component>("Дата сборки") {
                    @Override
                    public Object getFieldAt(Component object) {
                        return object.date_text;
                    }
                },
                new ColumnInfo<Component>("Статус") {
                    @Override
                    public Object getFieldAt(Component object) {
                        return object.getState();
                    }
                    @Override
                    public Class getRendererClass() {
                        return RendererStatusEnum.class;
                    }
                }
        );
    }
    @Override
    public DataMenuBar createMenuBar() {
        return new DataMenuBar(dataSource.getPluralDescription(), PassCode.InstallComponentFromFolder,
                PassCode.UpdateSelectedComponents,
                PassCode.PublishComponent,
                PassCode.ShowComponentChangesLog) {
            {
                addMenus(
                        new VisualiserMenu(
                                "Восстановление предыдущей версии компонента", "/icons/Resurrect.png") {
                            {
                                setFont(MainModule_.instance.getUI().getTheme().Fonts.get(VisualiserFonts.Menu));
                                add(Global.mainModule.getPass(PassCode.ResurrectComponent).createMenuItem());
                                add(Global.mainModule.getPass(PassCode.ResurrectComponentFromServer).createMenuItem());
                            }
                        }
                );
            }
        };
    }
    @Override
    public Vector<Component> getSelectedItems() {
        Vector<Component> target = new Vector<>();
        Component visualiser = null;
        Component server = null;
        //------------------------
        for (Component component : super.getSelectedItems()) {
            switch (component.getComponentType()) {
                case Visualizer_2:
                    server = component;
                    break;
                case Visualiser:
                    visualiser = component;
                    break;
                default:
                    target.add(component);
                    break;
            }
        }
        if (visualiser != null)
            target.add(visualiser);
        if (server != null)
            target.add(server);
        return target;
    }
}
