package com.zooracle.view.swing;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.BoxLayout;
import javax.swing.DefaultListCellRenderer;
import javax.swing.DefaultListSelectionModel;
import javax.swing.JList;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

//import main.ImageEditor;

public class PhotoList extends JPanel
{

	private int lastSelectionIndex = -1;

	private JPanel topPanel;
	private JTable table;
	private JScrollPane scrollPane;
	private ZooracleContentPanel zooracleContentPanel;

	private boolean maximized = false;

	private DefaultListSelectionModel selectionModel;

	private DefaultTableModel model;

//	private String columnNames[] = new String[] { Locale.labelAlias, Locale.labelId, Locale.labelPhotoName };
	private String columnNames[] = new String[] { Locale.labelPhotoName };
	
	private ArrayList<Integer> itemEdited = new ArrayList<Integer>();

	// Constructor of main frame
	public PhotoList(ZooracleContentPanel zooracleContentPanel)
	{

		this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
		this.zooracleContentPanel = zooracleContentPanel;
		// Set the frame characteristics
//		setSize(150, 600);
		setBackground(Color.gray);

		// Create a panel to hold all other components
		topPanel = new JPanel();
		topPanel.setLayout(new BoxLayout(topPanel, BoxLayout.Y_AXIS));

		this.add(topPanel);


		// Create some data
//		String dataValues[][] = { { "12", "234", "67" }, { "-123", "43", "853" }, { "93", "89.2", "109" }, { "279", "9033", "3092" } };

		// Create a new table instance
		table = new JTable(null, columnNames);
//		table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

//		table.setMinimumSize(new Dimension(150, 600));
//		table.setPreferredSize(new Dimension(150, 600));

		// table.setD
		selectionModel = new DefaultListSelectionModel();
		
		model = new DefaultTableModel();
		

		// table.setC
		selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		selectionModel.addListSelectionListener(new ListSelectionListener()
		{

			public void valueChanged(ListSelectionEvent e)
			{
				int selectionIndex = table.getSelectedRow();
				if (lastSelectionIndex != selectionIndex)
				{
					
					lastSelectionIndex = selectionIndex;
					
					if (selectionIndex==-1)
						return;
					System.out.println(table.getValueAt(selectionIndex, 0));
					System.out.println("sele:" + selectionIndex);
					
					if (PhotoList.this.zooracleContentPanel instanceof ImportView)
					{
						((ImportView)(PhotoList.this.zooracleContentPanel)).setCurrentPhoto(selectionIndex);
					}
//					if (selectionIndex > 2)
//						PhotoList.this.maximize(false);
				}
			}
		});
		// table.setDefaultRenderer(Object.class, new EditedCellRenderer(this));
		table.setSelectionModel(selectionModel);
		table.setDefaultRenderer(String.class, new BoardTableCellRenderer());
		table.setDefaultRenderer(Object.class, new BoardTableCellRenderer());
		
		table.setModel(model);
//		table.setMaximumSize(new Dimension(100, 300));
		

		// Add the table to a scrolling pane
		scrollPane = new JScrollPane();
//		scrollPane.add(table.getTableHeader());
//		scrollPane.add(table);
//		topPanel.add(scrollPane);
		
		topPanel.add(table.getTableHeader());
		topPanel.add(new JScrollPane(table));
	}
	//
	// // Main entry point for this example
	// public static void main(String args[])
	// {
	// // Create an instance of the test application
	// PhotoList mainFrame = new PhotoList();
	//
	// mainFrame.setVisible(true);
	// }

	public void maximize(boolean b)
	{
		this.maximized = b;
		if (b)
		{
			topPanel.setMinimumSize(new Dimension(900, 600));
			topPanel.setPreferredSize(new Dimension(900, 600));
			topPanel.setMaximumSize(new Dimension(900, 600));

		} else
		{

			topPanel.setMinimumSize(new Dimension(180, 600));
			topPanel.setPreferredSize(new Dimension(180, 600));
			topPanel.setMaximumSize(new Dimension(190, 600));
		}
		// System.out.println("repaintin");
		this.revalidate();
		this.repaint();
	}
	
	public DefaultListSelectionModel getSelectionModel() {
		return selectionModel;
	}

	public void setData(Object[][] data)
	{
		Object[][] fileNameData = new Object[data.length][1];
		for (int i = 0; i < data.length; i++)
			fileNameData[i][0] = data[i][2];
			
		itemEdited.clear();
		model.setDataVector(fileNameData, columnNames);
		
		scrollPane.revalidate();
		this.revalidate();
		this.repaint();
//		for (int i = model.getMaxSelectionIndex(); i > 0; i--)
//		{
//		if (model.getRowCount() > 0) {
//		    for (int i = myTableModel.getRowCount() - 1; i > -1; i--) {
//		        myTableModel.removeRow(i);
//		    }
//		}
		
//		model.removeIndexInterval(index0, index1);
//		}

		// model.r
	}

	class BoardTableCellRenderer extends DefaultTableCellRenderer
	{

		private static final long serialVersionUID = 1L;

		public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int col)
		{

			Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, col);
			Object valueAt = table.getModel().getValueAt(row, col);
			String s = "";
			if (valueAt != null)
			{
				s = valueAt.toString();
			}

//			if (s.contains("0"))
			if (isSelected)
			{
				c.setForeground(GUISettings.itemSelectedForegroundColor);
				c.setBackground(GUISettings.itemSelectedBackgroundColor);
				if (!itemEdited.contains(row))
					itemEdited.add(row);
			} else
			{
				if (itemEdited.contains(row))
				{
					c.setForeground(GUISettings.itemEditedForegroundColor);
					c.setBackground(GUISettings.itemEditedBackgroundColor);
				}
				else
				{
					c.setForeground(Color.black);
					c.setBackground(Color.white);	
				}
			}

			return c;
		}
	}

}