import moment from "moment";
import occupanciesTypes from "../schemas/occupancy.schema";
import log from "../config/log";

export const rentalMonthsToBeDeleted = async ( 
  occupancy: occupanciesTypes,
  startDate: string,
  endDate: string,
) => {
    const U = "RentalMonthHandler";
    const F = "rentalMonthsToBeDeleted";
    try {

        log.info(`[${U}], [${F}], Client Id [${occupancy?.clientId}], Tenant Id [${occupancy?.tenantId}], Rental Cycle [${occupancy?.rentalCycle}], Start Date [${startDate}], End Date [${endDate}]`);

        const rentalCycle = Number(occupancy.rentalCycle);
    
        let rentalMonthsToSub = 0;

        let rentalSlots = [];
    
        let tempDate = moment(startDate).format("YYYY-MM-DD");
        let tempStartDate = moment(startDate).format("YYYY-MM-DD");
    
        while (moment(tempDate).isSameOrBefore(moment(endDate), "date")) {
            let nextDate = moment(tempDate).add(1, "day").format("YYYY-MM-DD");
            if (Number(moment(nextDate).date()) === rentalCycle) {
                if (moment().isBefore(moment(tempStartDate), "date")) {
                    rentalMonthsToSub += 1;
                }

                let rentalSlotObj = {
                    startDate: tempStartDate,
                    endDate: tempDate,
                }

                rentalSlots.push(rentalSlotObj);
            }
    
            if (Number(moment(tempDate).date()) === rentalCycle) {
                tempStartDate = tempDate;
            }
    
            tempDate = nextDate;
        }


        log.info(`[${U}], [${F}], Client Id [${occupancy?.clientId}], Tenant Id [${occupancy?.tenantId}], Rental Month To Sub [${rentalMonthsToSub}], Rental Slots [${JSON.stringify(rentalSlots)}]`);

        return rentalMonthsToSub;
    } catch (error: any) {
        log.info(``)
        return 0;
    }
};
