package com.rjconsultores.ventaboletos.utilerias;

import java.util.Calendar;
import java.util.Date;

/**
 * Classe criada para realizar operações sobre a hora inicial do sistema.<br/>
 * 
 * A hora inicial do sistema pode ser obtida pelo método  DateUtil.getFecInicio() e retorna : YEAR, 1970; DAY_OF_MONTH, 1; MONTH, 0; HOUR_OF_DAY, 0;MINUTE, 0; <br/>
 * MILLISECOND, 0;		SECOND, 0. <br/>
 * 
 *  
 *  Assim é possível armazenar e somar tempos como 24:30 + 36:00 = 60 horas e 30 minutos
 * 
 * @author gleimar
 *
 */
public class HoraSistema {
	private Integer hora;
	private Integer minuto;

	public HoraSistema() {
		this.hora = 0;
		this.minuto = 0;
	}

	public HoraSistema(Date fecha) {
		conf(fecha);
	}

	private void conf(Date fecha) {
		Long tempo = DateUtil.getElapsedMinutos(DateUtil.getFecInicio().getTime(), fecha);

		long minutos = (tempo % 60);
		int horas = (tempo.intValue() / 60);

		hora = horas;
		minuto = (int) minutos;

	}

	@Override
	public String toString() {

		return (hora + ":" + ((String.valueOf(minuto).length() < 2) ? "0" + minuto : minuto));
	}

	public Integer getHora() {
		return hora;
	}

	public Integer getMinuto() {
		return minuto;
	}

	public void setMinuto(Integer minuto) {
		this.minuto = minuto;
	}

	public void setHora(Integer hora) {
		this.hora = hora;
	}

	public Date getFecha() {
		Calendar c = DateUtil.getFecInicio();
		c.add(Calendar.HOUR_OF_DAY, hora);
		c.add(Calendar.MINUTE, minuto);

		return c.getTime();
	}

	/**
	 * Realiza a soma da hora/minuto atual com o informado no parametro
	 * 
	 * @param horaAdicao
	 * @return
	 */
	public HoraSistema sumar(HoraSistema horaAdicao) {
		Calendar horaAtual = Calendar.getInstance();
		horaAtual.setTime(getFecha());

		Calendar horaSomar = Calendar.getInstance();
		horaSomar.setTime(horaAdicao.getFecha());

		int horaTotal = horaAtual.get(Calendar.HOUR_OF_DAY) + horaSomar.get(Calendar.HOUR_OF_DAY);
		int minutoTotal = horaAtual.get(Calendar.MINUTE) + horaSomar.get(Calendar.MINUTE);

		int cantDiasAtual = DateUtil.getElapsedDias(DateUtil.getFecInicio().getTime(), horaAtual.getTime());
		int cantDiasSumar = DateUtil.getElapsedDias(DateUtil.getFecInicio().getTime(), horaSomar.getTime());
		
		Calendar fecInicio = DateUtil.getFecInicio();
		fecInicio.add(Calendar.HOUR_OF_DAY, horaTotal);
		fecInicio.add(Calendar.MINUTE, minutoTotal);

		fecInicio.add(Calendar.DATE, cantDiasAtual);
		fecInicio.add(Calendar.DATE, cantDiasSumar);
		
		return new HoraSistema(fecInicio.getTime());
	}

}