package com.mozartframework.util;

import java.util.*;
import java.text.*;

/**
 * Набор утилит для форматирования дат.
 */
public class DateFormatter {

	private DateFormatter() {}

	/**
	 * Форматирует дату в соответсвии с паттерном и локолью.
	 * @param date преобразеумая дата
	 * @param pattern паттерн (see <code>java.text.SimpleDateFormat</code>)
	 * @param locale локаль
	 */
	static public String formatDate(Date date, String pattern, Locale locale) {
		return doFormat(date, pattern, locale, false);
	}

	/**
	 * Возвращает назавние дня недели в соответсвии с локалью.
	 * Название всегда начинается с заглавной буквы.
	 * @param date преобразеумая дата
	 * @param locale локаль
	 */
	static public String wdayName(Date date, Locale locale) {
		return doFormat(date, "EEEEEE", locale);
	}

	/**
	 * Возвращает сокращенное назавние дня недели в соответсвии с локалью.
	 * Название всегда начинается с заглавной буквы.
	 * @param date преобразеумая дата
	 * @param locale локаль
	 */
	static public String wdayShortName(Date date, Locale locale) {
		return doFormat(date, "EEE", locale);
	}

	/**
	 * Возвращает назавние месяца в соответсвии с локалью.
	 * Название всегда начинается с заглавной буквы.
	 * @param date преобразеумая дата
	 * @param locale локаль
	 */
	static public String monthName(Date date, Locale locale) {
		return doFormat(date, "MMMMMM", locale);
	}

	/**
	 * Возвращает сокращенное назавние месяца в соответсвии с локалью.
	 * Название всегда начинается с заглавной буквы.
	 * @param date преобразеумая дата
	 * @param locale локаль
	 */
	static public String monthShortName(Date date, Locale locale) {
		return doFormat(date, "MMM", locale);
	}

	
	/**
	 * Performs format
	 */
	static private String doFormat(Date date, String pattern, Locale locale, boolean upperFirstLetter) {
		SimpleDateFormat df = new SimpleDateFormat(pattern, locale);
		String s = df.format(date);
		if (upperFirstLetter) {
			String firstChar = s.substring(0, 1);
			return firstChar.toUpperCase(locale)+s.substring(1);
		}
		return s;
	}

	static private String doFormat(Date date, String pattern, Locale locale) {
		return doFormat(date, pattern, locale, true);
	}
}
