package jnet.client.gui;

import jnet.client.Client;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.filechooser.FileNameExtensionFilter;

public class SettingsPanel extends JPanel {
    

    public SettingsPanel() {
        show();
    }

    public void show() {
        this.setLayout(null); 
        this.setPreferredSize(new Dimension(300, 800));
        
        JLabel nadpisLabel = new JLabel("Obecné nastavení");
        nadpisLabel.setBounds(20, 20, 400, 25);
        nadpisLabel.setFont(nadpisLabel.getFont().deriveFont(20f));
        this.add(nadpisLabel);

        JCheckBox runMinimalized = new JCheckBox("Spouštět minimalizovaně");
        runMinimalized.setBounds(30, getNextY(nadpisLabel) + 20, 400, 25);
        runMinimalized.setSelected(Client.config.getBoolean("start_minimalized"));
        this.add(runMinimalized);

        JCheckBox enableDebug = new JCheckBox("Debug režim");
        enableDebug.setBounds(30, getNextY(runMinimalized), 400, 25);
        enableDebug.setSelected(Client.config.getBoolean("debug"));
        this.add(enableDebug);

        JLabel nadpisSoundLabel = new JLabel("Zvuky");
        nadpisSoundLabel.setBounds(20, getNextY(enableDebug) + 20, 400, 25);
        nadpisSoundLabel.setFont(nadpisLabel.getFont().deriveFont(20f));
        this.add(nadpisSoundLabel);

        JCheckBox enableSounds = new JCheckBox("Povolit zvuky");
        enableSounds.setBounds(30, getNextY(nadpisSoundLabel), 400, 25);
        enableSounds.setSelected(Client.config.getBoolean("sound"));
        this.add(enableSounds);

        // slider nastaveni hlasitosti
        JLabel hlasLabel = new JLabel("Hlasitost");
        hlasLabel.setBounds(30, getNextY(enableSounds), 80, 25);
        this.add(hlasLabel);

        JSlider volumeSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, 50);
        volumeSlider.setBounds(110, getNextY(enableSounds), 200, 50);
        volumeSlider.setValue(Client.config.getInt("volume"));
        volumeSlider.setPaintTrack(true);
        volumeSlider.setPaintTicks(true);
        volumeSlider.setPaintLabels(true);
        volumeSlider.setMajorTickSpacing(50);

        JLabel sliderValue = new JLabel(volumeSlider.getValue() + " %");
        sliderValue.setBounds(350, getNextY(enableSounds), 50, 25);
        this.add(sliderValue);

        volumeSlider.addChangeListener(new ChangeListener() {
            @Override
            public void stateChanged(ChangeEvent e) {
                sliderValue.setText(volumeSlider.getValue() + " %");
            }
        });
        this.add(volumeSlider);
        
        // vyber souboru vse online 
        JLabel fileAllOkLabel = new JLabel("Zvuk vše online:");
        fileAllOkLabel.setBounds(30, getNextY(volumeSlider), 150, 25);
        this.add(fileAllOkLabel);
        
        JTextField filePathFieldAllOk = new JTextField(25);
        filePathFieldAllOk.setEditable(false);
        filePathFieldAllOk.setBounds(200, getNextY(volumeSlider), 200, 25);
        filePathFieldAllOk.setText(Client.config.getString("sound_all_online"));
        this.add(filePathFieldAllOk);
        
        JButton selectFileButtonAllOk = new JButton("Vyber soubor");
        selectFileButtonAllOk.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Vytvoření JFileChooser
                JFileChooser fileChooser = new JFileChooser();

                // Nastavení filtru souborů (volitelné)
                FileNameExtensionFilter filter = new FileNameExtensionFilter("Zvukove soubory WAV", "wav");
                fileChooser.setFileFilter(filter);

                // Zobrazení dialogu pro výběr souboru
                int result = fileChooser.showOpenDialog(null);

                // Zpracování výsledku
                if (result == JFileChooser.APPROVE_OPTION) {
                    File selectedFile = fileChooser.getSelectedFile();
                    filePathFieldAllOk.setText(selectedFile.getAbsolutePath());
                } else {
                    filePathFieldAllOk.setText(Client.config.getString("sound_all_online"));
                }
            }
        });
        selectFileButtonAllOk.setBounds(420, getNextY(volumeSlider), 80, 25);
        this.add(selectFileButtonAllOk);
        
        // vyber souboru jeden online 
        JLabel fileOneOkLabel = new JLabel("Zvuk jeden online:");
        fileOneOkLabel.setBounds(30, getNextY(filePathFieldAllOk), 150, 25);
        this.add(fileOneOkLabel);
        
        JTextField filePathFieldOneOk = new JTextField(25);
        filePathFieldOneOk.setEditable(false);
        filePathFieldOneOk.setText(Client.config.getString("sound_one_online"));
        filePathFieldOneOk.setBounds(200, getNextY(filePathFieldAllOk), 200, 25);
        this.add(filePathFieldOneOk);
        
        JButton selectFileButtonOneOk = new JButton("Vyber soubor");
        selectFileButtonOneOk.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Vytvoření JFileChooser
                JFileChooser fileChooser = new JFileChooser();

                // Nastavení filtru souborů (volitelné)
                FileNameExtensionFilter filter = new FileNameExtensionFilter("Zvukove soubory WAV", "wav");
                fileChooser.setFileFilter(filter);

                // Zobrazení dialogu pro výběr souboru
                int result = fileChooser.showOpenDialog(null);

                // Zpracování výsledku
                if (result == JFileChooser.APPROVE_OPTION) {
                    File selectedFile = fileChooser.getSelectedFile();
                    filePathFieldOneOk.setText(selectedFile.getAbsolutePath());
                } else {
                    filePathFieldOneOk.setText(Client.config.getString("sound_one_online"));
                }
            }
        });
        selectFileButtonOneOk.setBounds(420, getNextY(filePathFieldAllOk), 80, 25);
        this.add(selectFileButtonOneOk);
        
        // vyber souboru první offline 
        JLabel fileFirstKoLabel = new JLabel("Zvuk první offline:");
        fileFirstKoLabel.setBounds(30, getNextY(filePathFieldOneOk), 150, 25);
        this.add(fileFirstKoLabel);
        
        JTextField filePathFieldFirstKo = new JTextField(25);
        filePathFieldFirstKo.setEditable(false);
        filePathFieldFirstKo.setText(Client.config.getString("sound_first_offline"));
        filePathFieldFirstKo.setBounds(200, getNextY(filePathFieldOneOk), 200, 25);
        this.add(filePathFieldFirstKo);
        
        JButton selectFileButtonFirstKo = new JButton("Vyber soubor");
        selectFileButtonFirstKo.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Vytvoření JFileChooser
                JFileChooser fileChooser = new JFileChooser();

                // Nastavení filtru souborů (volitelné)
                FileNameExtensionFilter filter = new FileNameExtensionFilter("Zvukove soubory WAV", "wav");
                fileChooser.setFileFilter(filter);

                // Zobrazení dialogu pro výběr souboru
                int result = fileChooser.showOpenDialog(null);

                // Zpracování výsledku
                if (result == JFileChooser.APPROVE_OPTION) {
                    File selectedFile = fileChooser.getSelectedFile();
                    filePathFieldFirstKo.setText(selectedFile.getAbsolutePath());
                } else {
                    filePathFieldFirstKo.setText(Client.config.getString("sound_first_offline"));
                }
            }
        });
        selectFileButtonFirstKo.setBounds(420, getNextY(filePathFieldOneOk), 80, 25);
        this.add(selectFileButtonFirstKo);
        
        // vyber souboru dalsi offline 
        JLabel filefirstNextLabel = new JLabel("Zvuk další offline:");
        filefirstNextLabel.setBounds(30, getNextY(filePathFieldFirstKo), 150, 25);
        this.add(filefirstNextLabel);
        
        JTextField filePathFieldNextKo = new JTextField(25);
        filePathFieldNextKo.setEditable(false);
        filePathFieldNextKo.setText(Client.config.getString("sound_next_offline"));
        filePathFieldNextKo.setBounds(200, getNextY(filePathFieldFirstKo), 200, 25);
        this.add(filePathFieldNextKo);
        
        JButton selectFileButtonNextKo = new JButton("Vyber soubor");
        selectFileButtonNextKo.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Vytvoření JFileChooser
                JFileChooser fileChooser = new JFileChooser();

                // Nastavení filtru souborů (volitelné)
                FileNameExtensionFilter filter = new FileNameExtensionFilter("Zvukove soubory WAV", "wav");
                fileChooser.setFileFilter(filter);

                // Zobrazení dialogu pro výběr souboru
                int result = fileChooser.showOpenDialog(null);

                // Zpracování výsledku
                if (result == JFileChooser.APPROVE_OPTION) {
                    File selectedFile = fileChooser.getSelectedFile();
                    filePathFieldNextKo.setText(selectedFile.getAbsolutePath());
                } else {
                    filePathFieldNextKo.setText(Client.config.getString("sound_next_offline"));
                }
            }
        });
        selectFileButtonNextKo.setBounds(420, getNextY(filePathFieldFirstKo), 80, 25);
        this.add(selectFileButtonNextKo);
        
        // tlacitko uložit
        JButton b = new JButton("Uložit");
        b.setBounds(20, getNextY(filePathFieldNextKo)+50, 100, 30);
        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {

                Client.config.setBoolean("debuger", enableDebug.isSelected());
                Client.config.setBoolean("start_minimalized", runMinimalized.isSelected());
                Client.config.setBoolean("sound", enableSounds.isSelected());
                Client.config.setInt("volume", volumeSlider.getValue());
                Client.config.save();
            }
        });
        this.add(b);

    }

    private int getNextY(Component p) {
        return p.getY() + p.getHeight() + 30;
    }
    

}
