package danielcortes.xyz.informes;

import danielcortes.xyz.data.DAOManager;
import danielcortes.xyz.models.caja.Caja;
import danielcortes.xyz.models.caja.CajaDAO;
import danielcortes.xyz.models.egreso.Egreso;
import danielcortes.xyz.models.egreso.EgresoDAO;
import danielcortes.xyz.models.tipo_egreso.TipoEgreso;
import java.time.LocalDate;
import java.time.YearMonth;
import java.util.HashMap;
import java.util.List;

public class InformeEgresos {

  private HashMap<LocalDate, List<Egreso>> informe;

  private InformeEgresos() {
  }

  public List<Egreso> get(LocalDate localDate) {
    return informe.get(localDate);
  }

  private void put(LocalDate localDate, List<Egreso> egresos) {
    informe.put(localDate, egresos);
  }

  public int size(){
    return informe.size();
  }

  public static InformeEgresos generate(YearMonth mes, TipoEgreso tipoEgreso) {
    InformeEgresos informeEgresos = new InformeEgresos();
    informeEgresos.informe = new HashMap<>();

    LocalDate currentDate = mes.atDay(1);
    LocalDate endDatePlusOne = mes.atEndOfMonth().plusDays(1);

    CajaDAO cajaDAO = DAOManager.getCajaDAO();
    EgresoDAO egresoDAO = DAOManager.getEgresoDAO();

    while (currentDate.isBefore(endDatePlusOne)) {
      Caja caja = cajaDAO.getByFecha(currentDate).orElse(Caja.EMPTY);

      List<Egreso> egresos = egresoDAO.getByTipoEgresoEnCaja(tipoEgreso, caja);
      informeEgresos.put(currentDate, egresos);

      currentDate = currentDate.plusDays(1);
    }

    return informeEgresos;
  }
}
