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

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.GridLayout;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;
import javax.swing.border.LineBorder;

import com.dlsc.flexgantt.swing.treetable.ITreeTableCellRenderer;
import com.dlsc.flexgantt.swing.treetable.TreeTable;

public class ResourceTreeTableCellRenderer extends JPanel implements
        ITreeTableCellRenderer {
    private JLabel iconLabel = new JLabel("");
    private JLabel locationLabel = new JLabel("Test");
    private JLabel capacityLabel = new JLabel();
    private JLabel nameLabel = new JLabel();
    private JLabel statusLabel = new JLabel();
    private JLabel averageLoadLabel = new JLabel();
    private JPanel contentPanel;

    public ResourceTreeTableCellRenderer() {
        setLayout(new BorderLayout());
        iconLabel.setVerticalAlignment(SwingConstants.NORTH);
        iconLabel.setBorder(new EmptyBorder(2, 2, 2, 2));
        iconLabel.setOpaque(true);
        add(BorderLayout.WEST, iconLabel);
        contentPanel = new JPanel();
        add(BorderLayout.CENTER, contentPanel);
        contentPanel.setLayout(new GridLayout(5, 1));
        contentPanel.add(nameLabel);
        contentPanel.add(locationLabel);
        contentPanel.add(capacityLabel);
        contentPanel.add(averageLoadLabel);
        contentPanel.add(statusLabel);
        contentPanel.setBorder(new EmptyBorder(2, 2, 2, 2));
        nameLabel.setFont(new Font("courier", Font.PLAIN, 12));
        locationLabel.setFont(new Font("courier", Font.PLAIN, 12));
        capacityLabel.setFont(new Font("courier", Font.PLAIN, 12));
        averageLoadLabel.setFont(new Font("courier", Font.PLAIN, 12));
        statusLabel.setFont(new Font("courier", Font.PLAIN, 12));
    }

    /*
     * (non-Javadoc)
     * 
     * @see com.dlsc.flexgantt.swing.treetable.ITreeTableCellRenderer#getTreeTableCellRendererComponent(com.dlsc.flexgantt.swing.treetable.TreeTable,
     *      java.lang.Object, java.lang.Object, int, boolean, boolean, boolean,
     *      int, int, boolean)
     */
    @Override
    public Component getTreeTableCellRendererComponent(TreeTable tree,
            Object node, Object value, int depth, boolean selected,
            boolean expanded, boolean leaf, int row, int column,
            boolean hasFocus) {
        if (selected) {
            setBackground(tree.getSelectionBackground());
            contentPanel.setForeground(tree.getSelectionForeground());
            contentPanel.setBackground(tree.getSelectionBackground());
            iconLabel.setForeground(tree.getSelectionForeground());
            iconLabel.setBackground(tree.getSelectionBackground());
            nameLabel.setForeground(tree.getSelectionForeground());
            nameLabel.setBackground(tree.getSelectionBackground());
            locationLabel.setForeground(tree.getSelectionForeground());
            locationLabel.setBackground(tree.getSelectionBackground());
            capacityLabel.setForeground(tree.getSelectionForeground());
            capacityLabel.setBackground(tree.getSelectionBackground());
            averageLoadLabel.setForeground(tree.getSelectionForeground());
            averageLoadLabel.setBackground(tree.getSelectionBackground());
            statusLabel.setForeground(tree.getSelectionForeground());
            statusLabel.setBackground(tree.getSelectionBackground());
        } else {
            setBackground(tree.getBackground(row));
            contentPanel.setForeground(tree.getForeground());
            contentPanel.setBackground(tree.getBackground(row));
            iconLabel.setForeground(tree.getForeground());
            iconLabel.setBackground(tree.getBackground(row));
            nameLabel.setForeground(tree.getForeground());
            nameLabel.setBackground(tree.getBackground());
            locationLabel.setForeground(tree.getForeground());
            locationLabel.setBackground(tree.getBackground());
            capacityLabel.setForeground(tree.getForeground());
            capacityLabel.setBackground(tree.getBackground());
            averageLoadLabel.setForeground(tree.getForeground());
            averageLoadLabel.setBackground(tree.getBackground());
            statusLabel.setForeground(tree.getForeground());
            statusLabel.setBackground(tree.getBackground());
        }

        setBorder(null);
        if (column == Integer.MIN_VALUE) {
            setBorder(new LineBorder(Color.BLACK));
        }

        Resource resource = (Resource) value;
        iconLabel.setIcon(resource.getIcon());
        nameLabel.setText(resource.getName());
        locationLabel.setText(resource.getLocation());
        capacityLabel.setText(Double.toString(resource.getCapacity()));
        averageLoadLabel.setText(Double.toString(resource.getAverageLoad()));
        statusLabel.setText(resource.getStatus().toString());
        return this;
    }
}
