package icy.gui.dialog;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;

import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;

public class SaverOptionPanel extends JPanel
{
    private JLabel overwriteMetaLabel;
    private JLabel fpsLabel;
    private JLabel multipleFilesLabel;
    private JCheckBox overwriteMetaCheckbox;
    private JSpinner fpsSpinner;
    private JCheckBox multipleFilesCheckbox;

    public SaverOptionPanel()
    {
        super();

        initialize();
    }

    private void initialize()
    {
        GridBagLayout gridBagLayout = new GridBagLayout();
        gridBagLayout.columnWidths = new int[] {0, 0, 0};
        gridBagLayout.rowHeights = new int[] {0, 0, 0, 0};
        gridBagLayout.columnWeights = new double[] {1.0, 0.0, Double.MIN_VALUE};
        gridBagLayout.rowWeights = new double[] {0.0, 0.0, 0.0, Double.MIN_VALUE};
        setLayout(gridBagLayout);

        multipleFilesLabel = new JLabel(" Save as multiple files");
        multipleFilesLabel.setToolTipText("Save each slice/frame in a separate file");
        GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
        gbc_lblNewLabel.anchor = GridBagConstraints.WEST;
        gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
        gbc_lblNewLabel.gridx = 0;
        gbc_lblNewLabel.gridy = 0;
        add(multipleFilesLabel, gbc_lblNewLabel);

        multipleFilesCheckbox = new JCheckBox("");
        multipleFilesCheckbox.setToolTipText("Save each slice/frame in a separate file");
        GridBagConstraints gbc_multipleFilesCheckbox = new GridBagConstraints();
        gbc_multipleFilesCheckbox.anchor = GridBagConstraints.EAST;
        gbc_multipleFilesCheckbox.insets = new Insets(0, 0, 5, 0);
        gbc_multipleFilesCheckbox.gridx = 1;
        gbc_multipleFilesCheckbox.gridy = 0;
        add(multipleFilesCheckbox, gbc_multipleFilesCheckbox);

        fpsLabel = new JLabel(" Frame per second");
        fpsLabel.setToolTipText("Number of frame per second");
        GridBagConstraints gbc_lblNewLabel_1 = new GridBagConstraints();
        gbc_lblNewLabel_1.anchor = GridBagConstraints.WEST;
        gbc_lblNewLabel_1.insets = new Insets(0, 0, 5, 5);
        gbc_lblNewLabel_1.gridx = 0;
        gbc_lblNewLabel_1.gridy = 1;
        add(fpsLabel, gbc_lblNewLabel_1);

        fpsSpinner = new JSpinner();
        fpsSpinner.setModel(new SpinnerNumberModel(15, 1, 120, 1));
        fpsSpinner.setToolTipText("Number of frame per second");
        GridBagConstraints gbc_fpsSpinner = new GridBagConstraints();
        gbc_fpsSpinner.anchor = GridBagConstraints.EAST;
        gbc_fpsSpinner.insets = new Insets(0, 0, 5, 0);
        gbc_fpsSpinner.gridx = 1;
        gbc_fpsSpinner.gridy = 1;
        add(fpsSpinner, gbc_fpsSpinner);

        overwriteMetaLabel = new JLabel(" Overwrite metadata name");
        overwriteMetaLabel.setToolTipText("Overwrite metadata name with filename");
        GridBagConstraints gbc_lblNewLabel_2 = new GridBagConstraints();
        gbc_lblNewLabel_2.anchor = GridBagConstraints.WEST;
        gbc_lblNewLabel_2.insets = new Insets(0, 0, 0, 5);
        gbc_lblNewLabel_2.gridx = 0;
        gbc_lblNewLabel_2.gridy = 2;
        add(overwriteMetaLabel, gbc_lblNewLabel_2);

        overwriteMetaCheckbox = new JCheckBox("");
        overwriteMetaCheckbox.setToolTipText("Overwrite metadata name with filename");
        GridBagConstraints gbc_overwriteMetaCheckbox = new GridBagConstraints();
        gbc_overwriteMetaCheckbox.anchor = GridBagConstraints.NORTHEAST;
        gbc_overwriteMetaCheckbox.gridx = 1;
        gbc_overwriteMetaCheckbox.gridy = 2;
        add(overwriteMetaCheckbox, gbc_overwriteMetaCheckbox);
    }

    public boolean isFramePerSecondVisible()
    {
        return fpsSpinner.isVisible();
    }

    public void setFramePerSecondVisible(boolean value)
    {
        fpsLabel.setVisible(value);
        fpsSpinner.setVisible(value);
    }

    public boolean isMultipleFilesVisible()
    {
        return multipleFilesCheckbox.isVisible();
    }

    public void setMultipleFilesVisible(boolean value)
    {
        multipleFilesLabel.setVisible(value);
        multipleFilesCheckbox.setVisible(value);
    }

    public void setForcedMultipleFilesOn()
    {
        multipleFilesCheckbox.setEnabled(false);
        multipleFilesCheckbox.setSelected(true);
    }

    public void setForcedMultipleFilesOff()
    {
        multipleFilesCheckbox.setEnabled(false);
        multipleFilesCheckbox.setSelected(false);
    }

    public void removeForcedMultipleFiles()
    {
        multipleFilesCheckbox.setEnabled(true);
        multipleFilesCheckbox.setSelected(false);
    }

    public boolean isOverwriteMetadataVisible()
    {
        return overwriteMetaCheckbox.isVisible();
    }

    public void setOverwriteMetadataVisible(boolean value)
    {
        overwriteMetaLabel.setVisible(value);
        overwriteMetaCheckbox.setVisible(value);
    }

    public int getFramePerSecond()
    {
        return ((Integer) fpsSpinner.getValue()).intValue();
    }

    public void setFramePerSecond(int value)
    {
        fpsSpinner.setValue(Integer.valueOf(value));
    }

    public boolean getMultipleFiles()
    {
        return multipleFilesCheckbox.isSelected();
    }

    public void setMultipleFiles(boolean value)
    {
        multipleFilesCheckbox.setSelected(value);
    }

    public boolean getOverwriteMetadata()
    {
        return overwriteMetaCheckbox.isSelected();
    }

    public void setOverwriteMetadata(boolean value)
    {
        overwriteMetaCheckbox.setSelected(value);
    }
}