/*******************************************************************************
 * Copyright (c) 2004, 2008 Tasktop Technologies and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *     Tasktop Technologies - initial API and implementation
 *******************************************************************************/

package org.eclipse.mylyn.internal.sandbox.ui.planner;

import org.eclipse.jface.viewers.Viewer;
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;

/**
 * @author Mik Kersten
 */
public class TaskPlanSorter extends TaskActivitySorter {

	// {".", "Description", "Priority", "Estimated Time", "Reminder Date"};
	public final static int PRIORITY = 1;

	public final static int DESCRIPTION = 2;

	public final static int DURATION = 3;

	public final static int ESTIMATE = 4;

	public final static int REMINDER = 5;

	public static final int ICON = 0;

	private final int criteria;

	public TaskPlanSorter(int criteria) {
		super(criteria);
		this.criteria = criteria;
	}

	@Override
	public int compare(Viewer viewer, Object obj1, Object obj2) {
		AbstractTask t1 = (AbstractTask) obj1;
		AbstractTask t2 = (AbstractTask) obj2;

		switch (criteria) {
		case PRIORITY:
			return comparePriority(t1, t2);
		case DESCRIPTION:
			return compareDescription(t1, t2);
		case DURATION:
			return compareDuration(t1, t2);
		case ESTIMATE:
			return compareEstimated(t1, t2);
		case REMINDER:
			return compareReminder(t1, t2);
		default:
			return 0;
		}
	}

	private int compareReminder(AbstractTask task1, AbstractTask task2) {
		if (task2.getScheduledForDate() == null) {
			return -1;
		}
		if (task1.getScheduledForDate() == null) {
			return 1;
		}
		if (task1.getScheduledForDate() == null && task2.getScheduledForDate() == null) {
			return 0;
		}
		return task2.getScheduledForDate().compareTo(task1.getScheduledForDate());
	}

	// protected int compareEstimated(ITask task1, ITask task2) {
	// if (task1.getEstimateTimeHours() > task2.getEstimateTimeHours()) {
	// return 1;
	// } else {
	// return -1;
	// }

	// private int compareDescription(ITask task1, ITask task2) {
	// return
	// task1.getDescription(false).compareTo(task2.getDescription(false));
	// }
	//	
	// private int comparePriority(ITask task1, ITask task2) {
	// return task1.getPriority().compareTo(task2.getPriority());
	// }
	//	

}
