package com.dlsc.flexgantt.showcase.demo.textures;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.URL;

import javax.swing.DefaultComboBoxModel;
import javax.swing.DefaultListCellRenderer;
import javax.swing.ImageIcon;
import javax.swing.JComboBox;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.UIManager;

import com.dlsc.flexgantt.swing.GanttChart;
import com.dlsc.flexgantt.swing.layer.LayerContainer;
import com.dlsc.flexgantt.swing.layer.system.BackgroundLayer;
import com.dlsc.flexgantt.swing.treetable.TreeTable;

public class TextureChooser extends JPanel {

    public TextureChooser(String title, GanttChart gc, final TreeTable tt,
            final LayerContainer lc) {
        setLayout(new BorderLayout());
        setOpaque(false);

        DefaultComboBoxModel model = new DefaultComboBoxModel();
        model.addElement(new Entry("None", null));
        model.addElement(new Entry("Cracked", "tile1.jpg"));
        model.addElement(new Entry("Rough Ground", "tile2.jpg"));
        model.addElement(new Entry("Grass", "tile3.jpg"));
        model.addElement(new Entry("Wood", "tile4.jpg"));
        model.addElement(new Entry("Concrete", "tile5.jpg"));
        model.addElement(new Entry("Leafs", "tile6.jpg"));

        final JComboBox box = new JComboBox(model);
        box.setRenderer(new Renderer());
        box.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent evt) {
                Entry entry = (Entry) box.getSelectedItem();
                tt.setTexture(entry.originalImage);
                lc.getSystemLayer(BackgroundLayer.class).setTexture(
                        entry.originalImage);
            }
        });

        add(BorderLayout.CENTER, box);
    }

    class Entry {
        public ImageIcon icon;
        public Image originalImage;

        public String name;

        public Entry(String name, String fileName) {
            this.name = name;
            
            if (fileName != null) {
                URL url = getClass().getResource(fileName);
                icon = new ImageIcon(url);
                originalImage = icon.getImage();
                icon.setImage(icon.getImage().getScaledInstance(12, 12,
                        Image.SCALE_SMOOTH));                
            }
        }
    }

    class Renderer extends DefaultListCellRenderer {

        @Override
        public Component getListCellRendererComponent(JList list, Object value,
                int index, boolean isSelected, boolean cellHasFocus) {
            Entry entry = (Entry) value;
            setText(entry.name);
            setIcon(entry.icon);
            if (isSelected) {
                setForeground(UIManager.getColor("Table.selectionForeground"));
                setBackground(UIManager.getColor("Table.selectionBackground"));
            } else {
                setForeground(UIManager.getColor("Table.foreground"));
                setBackground(UIManager.getColor("Table.background"));
            }
            return this;
        }
    }
}
