package de.jaujau.gui;


import java.awt.Font;
import java.awt.Image;


import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;

import de.jaujau.daten.Spielerverwaltung;
import de.jaujau.daten.Texturenpakete;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;

/**
 * Klasse texturenauswaehlen_GUI
 * @author Sebastian Kacza
 * Diese Klasse erstelt ein Fenster für die Texturenpaket auswahl
 */
public class texturenauswaehlen_GUI extends JFrame{

	private static final long serialVersionUID = 1L;
	private JPanel contentPane;
	private Texturenpakete pakete;
	private JComboBox<String> comboBox;
	private JLabel vorschaubild;
	private JButton speichern, hinzufuegen, schliessen;
	private Spielerverwaltung spielerverwaltung;
	
	
	/**
	 * Konstruktor fpr das Fenster
	 * @param texturenpakete
	 */
	public texturenauswaehlen_GUI (Texturenpakete texturenpakete, Spielerverwaltung spieler) {
		pakete = texturenpakete;
		erstelleFenster();
		aktualisiereInhalt();
		spielerverwaltung = spieler;
	}
	
	
	/**
	 * Erstelt alle komponenten des Fensters
	 */
	private void erstelleFenster() {
		//Fenster größen fetslegen
		setAlwaysOnTop(true);
		setBounds(100, 100, 391, 361);
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(null);
		setResizable(false);
		
		//Vorschaubild
		vorschaubild = new JLabel();
		vorschaubild.setBounds(32, 79, 167, 214);
		contentPane.add(vorschaubild);
		
		//Text "Texturenauswahl"
		JLabel lblNewLabel = new JLabel("Texturenauswahl");
		lblNewLabel.setBounds(34, 11, 304, 25);
		lblNewLabel.setFont(new Font("Tahoma", Font.PLAIN, 20));
		lblNewLabel.setHorizontalAlignment(SwingConstants.CENTER);
		contentPane.add(lblNewLabel);
		
		//Teste Hinzufügen
		hinzufuegen = new JButton("Hinzuf\u00FCgen");
		hinzufuegen.setBounds(209, 82, 137, 23);
		hinzufuegen.addActionListener(e-> paketHinzufuegeb());
		contentPane.add(hinzufuegen);
		
		
		//Teste Speichern
		speichern = new JButton("Speichern");
		speichern.setBounds(209, 180, 140, 23);
		speichern.addActionListener(e-> speichern());
		contentPane.add(speichern);
		
		
		//Teste Schießen
		schliessen = new JButton("Schlie\u00DFen");
		schliessen.setBounds(209, 130, 140, 23);
		schliessen.addActionListener(e-> schliessen());
		contentPane.add(schliessen);
		
		
		//Auswahl Box
		comboBox = new JComboBox<String>();
		comboBox.setBounds(10, 37, 351, 25);
		contentPane.add(comboBox);
		
		aktualisiereInhalt();
	}
	
	
	/**
	 *  Öffent einen auswahl dialog zu Öfnnen einer Datei
	 *  Bei klick auf OK wird das Paket hinzugefügt
	 */
	private void paketHinzufuegeb() {
		//Quelle: https://www.java-tutorial.org/jfilechooser.html
		
        // JFileChooser-Objekt erstellen
        JFileChooser chooser = new JFileChooser();
        // Dialog zum Oeffnen von Dateien anzeigen
        int chooseroption = chooser.showOpenDialog(null);
        // Abfrage, ob auf "Öffnen" geklickt wurde
        if(chooseroption == JFileChooser.APPROVE_OPTION)
        {
        	pakete.addPaket(chooser.getSelectedFile().toString());
        	aktualisiereInhalt();
        }
	}
	
	
	/**
	 * Schießt das Auswahlfenster
	 */
	private void schliessen() {
		this.setVisible(false);
	}
	
	
	/**
	 * Speichert die Auswahl des akutellen Paketes
	 */
	private void speichern() {
//		Austauschen sobalt Spielerverwaltung fertig
//		if(spieler.getLevel() >= pakete.getLevel(comboBox.getSelectedIndex())) {
//			pakete.setAktivesPaket(comboBox.getSelectedIndex());
//			aktualisiereBild();
//			
//		}
		pakete.setAktivesPaket(comboBox.getSelectedIndex());
		aktualisiereBild();
	}
	
	
	/**
	 * Aktualisiert die Inhalte der ComboBox
	 */
	private void aktualisiereInhalt() {
		comboBox.removeAllItems();
		for(int i = 0; i < pakete.getAnzahlPakete(); i++) {
			comboBox.addItem(pakete.getName(i) + " [Level " + pakete.getLevel(i) + "]");
		}
		comboBox.setSelectedIndex(pakete.getAktivesPaket());
		aktualisiereBild();
	}
	
	
	/**
	 * Aktualisiert das Vorschaubild
	 */
	private void aktualisiereBild() {
		vorschaubild.setIcon(new ImageIcon(pakete.getTextur(32).getScaledInstance(150, 210, Image.SCALE_SMOOTH)));
	}
}
