package com.reucon.openfire.plugin.archive.util;

import org.jivesoftware.util.XMPPDateTimeFormat;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

/**
 * Utility class to parse and format dates in UTC that adhere to the DateTime format specified in Jabber Date and Time Profiles.
 */
public class XmppDateUtil {
	private static final DateFormat dateFormat;
	private static final DateFormat dateFormatWithoutMillis;

	static {
		dateFormat = new SimpleDateFormat(XMPPDateTimeFormat.XMPP_DATETIME_FORMAT);
		dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
		dateFormatWithoutMillis = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
		dateFormatWithoutMillis.setTimeZone(TimeZone.getTimeZone("UTC"));
	}

	private XmppDateUtil() {

	}

	public static Date parseDate(String dateString) {
		Date date = null;

		if (dateString == null) {
			return null;
		}

		synchronized (dateFormat) {
			try {
				date = dateFormat.parse(dateString);
			} catch (ParseException e) {
				// ignore
			}
		}

		if (date != null) {
			return date;
		}

		synchronized (dateFormatWithoutMillis) {
			try {
				date = dateFormatWithoutMillis.parse(dateString);
			} catch (ParseException e) {
				// ignore
			}
		}

		return date;
	}

	public static String formatDate(Date date) {
		if (date == null) {
			return null;
		}

		synchronized (dateFormat) {
			return dateFormat.format(date);
		}
	}
}
