package com.csfb.fao.clr.maintenance.controller;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import com.csfb.fao.clr.maintenance.model.Address;
import com.csfb.fao.clr.maintenance.model.Facility;
import com.csfb.fao.clr.maintenance.model.SortableList;

/*import com.csfb.fao.clr.maintenance.model.SortableList;
import com.googlehouse.usecases.listtable.data.Address;
import com.googlehouse.usecases.listtable.data.Employee;
*/
@SuppressWarnings("serial")
public class FacilityTable extends SortableList {
	
	
	int selectedRowIndex  = -1;  // indicator of current row in the list table
	List facilities = new ArrayList();
	
	String       on   = "over";
	String       off  = "";
	
	
	Facility      facility   		    					=   null;   // selcted facility 
	
	public final static String    defaultSortableColumn  	=  "name"; // default sort column
	
	
	boolean    showDetailView  = false;
	

	public FacilityTable()
	{
		super(defaultSortableColumn);
	}
	
	
	public java.util.List getFacilities() {
		
		sort(getSort(),isAscending()); // add the sorting logic
		return facilities;
	}

	public void setFacilities(java.util.List facilities) {
		System.out.println("FacilityTable -> setFacilities() called" + facilities);
        this.facilities = facilities;
	}

	public int getSelectedRowIndex() {
		return selectedRowIndex;
	}

	public void setSelectedRowIndex(int selectedRowIndex) {
		System.out.println("FacilityTable.java -> setSelectedRowIndex: " + selectedRowIndex);
        this.selectedRowIndex = selectedRowIndex;
	}
	
	
	
	
	
	public String  viewFacility()
	{
	     setSelectedRowIndex(Integer.parseInt((String)getParameter("selectedRowIndex")));
	     setFacility((Facility)(facilities.get(this.getSelectedRowIndex())));
	     setShowDetailView(true);
	     return "OK";
	     
	}
	
	
	public String  save()
	{
	     // get rows  and update them in the database
		return "OK";
	}
	
	
	public String  cancel()
	{
	     setSelectedRowIndex(-1);
		 setFacility(null);
	     setShowDetailView(false);
	     return "home";
	     
	     
	}

	public String getOff() {
		return off;
	}

	public void setOff(String off) {
		this.off = off;
	}

	public String getOn() {
		return on;
	}

	public void setOn(String on) {
		this.on = on;
	}

	public boolean isShowDetailView() {
		return showDetailView;
	}

	public void setShowDetailView(boolean showDetailView) {
	    System.out.println("FacilityTable.java -> setShowDetailView() to " + showDetailView);
        this.showDetailView = showDetailView;
	}

	public Facility getFacility() {
        System.out.println("FacilityTable.java -> getFacility() is called...");
		return facility;
	}

	public void setFacility(Facility facility) {
		System.out.println("FacilityTable.java -> setFacility() is called: " + facility);
        this.facility = facility;
	}

	@Override
	protected boolean isDefaultAscending(String sortColumn) {
		return true;
	}

	
	@SuppressWarnings({"unchecked","unchecked", "unchecked"})
	@Override
	protected void sort(final String column, final boolean ascending) {
		Comparator comparator = new Comparator()
	    {
	        public int compare(Object o1, Object o2)
	        {
	            Facility e1 = (Facility)o1;
	            Facility e2 = (Facility)o2;
	            if (column == null)
	            {
	                return 0;
	            }
	            if (column.equals("name"))
	            {
	            	return ascending ? e1.getLastName().compareTo(e2.getLastName()):e2.getLastName().compareTo(e1.getLastName());
	            }
	            else
	            if (column.equals("address"))
	            {
	            	Address a1 = e1.getPrimaryResidentAddress();
	            	Address a2 = e2.getPrimaryResidentAddress();
	                return ascending ? a1.getAddressOne().compareTo(a2.getAddressOne()) : a2.getAddressOne().compareTo(a1.getAddressOne());
	            }
	            
	           
	            else return 0;
	        }
	    };
	    Collections.sort(facilities, comparator);
	    
		
	}


	


	

}
