package com.tandbergtv.metadatamanager.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.w3c.util.DateParser;
import org.w3c.util.InvalidDateException;

/**
 * This class provides a utility method to convert a string date to a java.util.Date object
 * It handles the following formats:
 * 
 * YYYY-MM-DDThh:mm:ssTZD
 * YYYY-MM-DDThh:mmTZD
 * YYYY-MM-DDThh:mm:ss
 * YYYY-MM-DDThh:mm
 * YYYY-MM-DD
 * YYYY 
 * 
 * @author vaibhav
 */

public class DateUtil {

	public static Date convertDate(String date) {
		if(date == null || date.equals("")) {
			return null;
		}
		
		Date d = null;

		d = parseDateWithTimeZone(date);
		if (d != null) {
			return d;
		}

		d = parseDate("yyyy-MM-dd'T'HH:mm:ss", date);
		if (d != null) {
			return d;
		}

		d = parseDate("yyyy-MM-dd'T'HH:mm", date);
		if (d != null) {
			return d;
		}

		d = parseDate("yyyy-MM-dd", date);
		if (d != null) {
			return d;
		}

		d = parseDate("yyyy", date);
		if (d != null) {
			return d;
		}

		return null;
	}

	private static Date parseDateWithTimeZone(String date) {
		if (date.contains("T")) {
			int indexOfT = date.indexOf("T");
			String time = date.substring(indexOfT);

			if (time.contains("Z") || time.contains("+") || time.contains("-")) {
				Date d1 = null;
				try {
					d1 = DateParser.parse(date);
				} catch (InvalidDateException e) {
					return null;
				}
				return d1;
			}
		}
		return null;
	}

	private static Date parseDate(String format, String date) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		try {
			return sdf.parse(date);
		} catch (ParseException e) {
			return null;
		}
	}
}
