package com.gfi.utils;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.i18n.LocaleContextHolder;

import com.ejie.ab39a.constantes.Constantes;
import com.gfi.constants.Constants;

/**
 * Agrupa utilidades para el manejo de fechas
 * 
 *  
 * 
 */
public class UtilDate {

	private static final Logger logger = LoggerFactory.getLogger(UtilDate.class);

	/**
	 * Constructor privado
	 */
	private UtilDate() {
	}

	private static final Calendar CALENDAR = Calendar.getInstance();

	/**
	 * Obtiene el formatter de fecha, correspondiente al idioma en curso.
	 * 
	 * @param isDateTime
	 *            boolean isDateTime
	 * @return DateFormat DateFormat
	 */
	public static DateFormat getDateFormatter(boolean isDateTime) {
		DateFormat df = isDateTime ? Constants.DATETIME_FORMATTERS.get(LocaleContextHolder.getLocale().getLanguage())
				: Constants.DATE_FORMATTERS.get(LocaleContextHolder.getLocale().getLanguage());
		return df != null ? df
				: (isDateTime ? Constants.DATETIME_FORMATTERS.get(Constants.ES)
						: Constants.DATE_FORMATTERS.get(Constants.ES));
	}

	/**
	 * Funcion que encapsula la obtencion de la fecha actual del sistema
	 * 
	 * @return Date Date
	 */
	public static Date currentDate() {
		Date result = UtilDate.CALENDAR.getTime();
		UtilDate.logger.trace("currentDate, resultado: {}", result);
		return result;
	}

	/**
	 * Formateo de una fecha.
	 * 
	 * @param fecha
	 *            la fecha
	 * @return fecha formateada
	 */
	public static String formateaFechaDDMMYYYY(Date fecha) {

		if (null == fecha) {
			return "";
		}
		SimpleDateFormat sdf = new SimpleDateFormat(Constantes.FORMATO_FECHA_STR);

		return sdf.format(fecha).replace("/", "");
	}

	/**
	 * Formateo de una fecha.
	 * 
	 * @param fecha
	 *            la fecha
	 * @return fecha formateada
	 */
	public static String formateaFechaDDMMYYYYMILI(Date fecha) {

		if (null == fecha) {
			return "";
		}
		SimpleDateFormat sdf = new SimpleDateFormat(Constantes.FORMATO_FECHA_STR_MILI);

		return sdf.format(fecha).replace("/", "").replace(":", "").replace(" ", "");
	}

}