package sk.sorien.pimpleplugin.ui;

import com.intellij.openapi.project.Project;
import com.intellij.openapi.wm.StatusBar;
import com.intellij.openapi.wm.impl.status.EditorBasedWidget;
import com.intellij.util.Consumer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import sk.sorien.pimpleplugin.Configuration;
import sk.sorien.pimpleplugin.ProjectComponent;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.event.MouseEvent;
import java.io.File;

public class ContainerStatusBarWidget extends EditorBasedWidget implements com.intellij.openapi.wm.StatusBarWidget.TextPresentation, com.intellij.openapi.wm.StatusBarWidget {

    private StatusBar statusBar;
    private String text;
    private Project project;

    public ContainerStatusBarWidget(Project project) {
        super(project);
        this.project = project;
    }

    @NotNull
    @Override

    public String ID() {
        return "silex.statusbar.widget";
    }

    @Nullable
    @Override
    public WidgetPresentation getPresentation(@NotNull PlatformType platformType) {
        return this;
    }

    @Override
    public void install(@NotNull StatusBar statusBar) {
        this.statusBar = statusBar;
    }

    @Override
    public void dispose() {

    }

    public void setText(String text) {
        this.text = text;
        if (statusBar != null) {
            statusBar.updateWidget(this.ID());
        }
    }

    @NotNull
    @Override
    public String getText() {
        return "Pimple Dump: " + text;
    }

    @NotNull
    @Override
    public String getMaxPossibleText() {
        return "";
    }

    @Override
    public float getAlignment() {
        return 0;
    }

    @Nullable
    @Override
    public String getTooltipText() {
        return null;
    }

    @Nullable
    @Override
    public Consumer<MouseEvent> getClickConsumer() {
        return new Consumer<MouseEvent>() {
            @Override
            public void consume(MouseEvent mouseEvent) {
                JFileChooser fileChooser = new JFileChooser();
                fileChooser.addChoosableFileFilter(new FileNameExtensionFilter("Pimple Definition File", "json"));
                fileChooser.setCurrentDirectory(new File(project.getBasePath()));

                int returnValue = fileChooser.showOpenDialog(null);
                if (returnValue == JFileChooser.APPROVE_OPTION) {
                    Configuration.getInstance(project).containerDefinitionFileName = fileChooser.getSelectedFile().getAbsolutePath();
                    ProjectComponent.configChanged(project);
                }
            }
        };
    }
}