import moment from "moment";
import log from "../config/log";

export const getVacantSlots = async(tenants: any[]) => {

  if (!tenants.length || tenants.length === 0) {
    return [{ startDate: moment().format("YYYY-MM-DD"), endDate: null }];
  }

  tenants.sort((a, b) =>
    moment(a.moveInDate).diff(moment(b.moveInDate))
  );

  const vacantSlots = [];

  let currentStart = moment(tenants[0].moveInDate);
  let currentEnd = tenants[0].moveOutDate ? moment(tenants[0].moveOutDate) : null;

  if (moment().isBefore(currentStart, "day")) {    
    vacantSlots.push({
      startDate: moment().clone().format("YYYY-MM-DD"),
      endDate: moment(tenants[0].moveInDate).clone().subtract(1, "day").format("YYYY-MM-DD"),
    });
  }

  for (let i = 1; i < tenants.length; i++) {
    const nextStart = moment(tenants[i].moveInDate);
    const nextEnd = tenants[i].moveOutDate ? moment(tenants[i].moveOutDate) : null;

    if (!currentEnd) break;

    if (nextStart.diff(currentEnd, "days") > 1) {
      vacantSlots.push({
        startDate: currentEnd.clone().add(1, "day").format("YYYY-MM-DD"),
        endDate: nextStart.clone().subtract(1, "day").format("YYYY-MM-DD"),
      });
    }

    
    if (!nextEnd) {
      currentEnd = null;
      break;
    } else if (nextEnd.isAfter(currentEnd)) {
      currentEnd = nextEnd;
    }
    
  }
  if (currentEnd) {
    vacantSlots.push({
      startDate: currentEnd.clone().add(1, "day").format("YYYY-MM-DD"),
      endDate: null,
    });
  }

  return vacantSlots;
};
