package view;

import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.*;
import javax.swing.table.AbstractTableModel;

import controler.SimpleCal;



public class CalendarSwingUI {

	/*
	 *           calendar          X
	 * _____________________________
	 *       < Month name >
	 * _____________________________
	 *  sun mon tue wed thu fri sat
	 * _____________________________
	 * |   |   |   | 1 | 2 | 3 | 4 |
	 * |___|___|___|___|___|___|___|
	 * | 5 | 6 | 7 | 8 | 9 | 10| 11|
	 * |___|___|___|___|___|___|___|
	 * | 12| 13| 14| 15| 16| 17| 18|
	 * |___|___|___|___|___|___|___|
	 * | 19| 20| 21| 22| 23| 24| 25|
	 * |___|___|___|___|___|___|___|
	 * | 26| 27| 28| 29| 30| 31|   |
	 * |___|___|___|___|___|___|___|
	 *
	 * */
	public static Container makeTable(final SimpleCal cal, final Nav nav){
		//make calendar
		final JTable table = new JTable(new AbstractTableModel() {
		    public String getColumnName(int col) {
		    	return cal.getWeekDayStr(col+1);
		    }
		    public int getRowCount() {
		    	return 6;
		    }
		    public int getColumnCount() {
		    	return 7;
		    }
		    public Object getValueAt(int row, int col) {
		    	return cal.getDayAt(col, row);
		    }
		    public boolean isCellEditable(int row, int col){
		    	return false;
		    }
		    public void setValueAt(Object value, int row, int col) {}
		});
		table.addMouseListener(new MouseListener(){
			public void mouseClicked(MouseEvent arg0) {
				SimpleCal tmp = SimpleCal.fromDayMonthYear((Integer)table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()), cal.getMonth(), cal.getYear());
				System.out.println("day clicked " + table.getValueAt(table.getSelectedRow(), table.getSelectedColumn()));
				System.out.println(tmp.getDay() + " " + tmp.getMonth());
			}
			public void mouseEntered(MouseEvent arg0) {}
			public void mouseExited(MouseEvent arg0) {}
			public void mousePressed(MouseEvent arg0) {}
			public void mouseReleased(MouseEvent arg0) {}
		});
		table.setRowHeight(40);
		table.setCellSelectionEnabled(true);
		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
		Container centerPanel = new JPanel(new BorderLayout());
		centerPanel.setLayout(new BorderLayout());
		centerPanel.add(table.getTableHeader(), BorderLayout.PAGE_START);
		centerPanel.add(new JScrollPane(table), BorderLayout.CENTER);
		//make month chooser
		Container topPanel = new JPanel();
		topPanel.add(new JButton(new AbstractAction("<"){
			public void actionPerformed(ActionEvent arg0) {
				SimpleCal tmp;
				if (cal.getMonth() == 1)
					tmp = SimpleCal.fromDayMonthYear(cal.getDay(), 12, cal.getYear()-1);
				else
					tmp = SimpleCal.fromDayMonthYear(cal.getDay(), cal.getMonth()-1, cal.getYear());
				nav.flip(SwingUI.makeFrontEnd(makeTable(tmp,nav)));
			}
		}));
		topPanel.add(new JLabel(SimpleCal.getMonthStr(cal.getMonth()) + " " + cal.getYear()));
		topPanel.add(new JButton(new AbstractAction(">"){
			public void actionPerformed(ActionEvent arg0) {
				SimpleCal tmp;
				if (Calendar.MONTH == 12)
					tmp = SimpleCal.fromDayMonthYear(cal.getDay(), 1, cal.getYear()+1);
				else
					tmp = SimpleCal.fromDayMonthYear(cal.getDay(), cal.getMonth()+1, cal.getYear());
				nav.flip(SwingUI.makeFrontEnd(makeTable(tmp,nav)));
			}
		}));
		//
		Container panel = new JPanel(new BorderLayout());
		panel.add(centerPanel);
		panel.add(topPanel, BorderLayout.NORTH);
		return panel;
	}


	public static void main(String[] args) {
		JFrame win = SwingUI.makeWin();
		Nav nav = SwingUI.makeNav(win);
		nav.flip(SwingUI.makeFrontEnd(makeTable(SimpleCal.fromToday(),nav)));
	}

}
