import { parseISO } from "date-fns";
import { formatInTimeZone } from 'date-fns-tz';

const timeZone = 'America/Guayaquil';

export const formatDateToEcuadorTime = (dateString: string) => {
    try {
        return formatInTimeZone(parseISO(dateString), timeZone, 'yyyy/MM/dd HH:mm:ss');

    } catch (error) {
        return '';
    }
};

export const parseDateToTime = (timestamp: number): string => {
    const date = new Date(timestamp);
    return formatInTimeZone(date, timeZone, 'HH:mm');
};

export const actualDatePlusDays = (addDays: number) => {
    const date = new Date();
    date.setDate(date.getDate() + addDays);
    return date;
}

export const formatDateToDateEcuadorTime = (date: Date): string => {
    return formatInTimeZone(date, timeZone, 'yyyy/MM/dd HH:mm:ss');
};

export const dateBodyTemplate = (rowData: any) => {
    return formatDateToEcuadorTime(rowData.createdAt);
};

export const dateBodyTemplateCreatedDateTime = (rowData: any) => {
    return formatDateToEcuadorTime(rowData.createdDateTime);
};

export const dateBodyTemplateAny = (rowData: any) => {
    if (rowData.fecha) {
        return formatDateToEcuadorTime(rowData.fecha);
    }
    if (rowData.createdAt) {
        return formatDateToEcuadorTime(rowData.createdAt);
    }
    return formatDateToEcuadorTime(rowData.fechaUltimaConsulta);
};

export const getStringDateWithTimeStart = (date: Date, tipo: string): string => {
    const dateFormat = tipo === 'start' ? getStartOfDay(date) : getEndOfDay(date);
    return formatDateToEcuadorTime(dateFormat.toISOString());
}

export const getStartOfDay = (date: Date): Date => {
    const start = new Date(date);
    start.setHours(0, 0, 0, 0);
    return start;
}

export const getEndOfDay = (date: Date): Date => {
    const end = new Date(date);
    end.setHours(23, 59, 59, 999);
    return end;
}

export const getStartOfMonth = () => {
    const now = new Date();
    return new Date(now.getFullYear(), now.getMonth(), 1);
};

export const getEndOfMonth = () => {
    const now = new Date();
    return new Date(now.getFullYear(), now.getMonth() + 1, 0);
};
