export function startOfDay(d) {
    const x = new Date(d);
    x.setHours(0, 0, 0, 0);
    return x;
}

export function sameDay(a, b) {
    return a.getFullYear() === b.getFullYear()
        && a.getMonth() === b.getMonth()
        && a.getDate() === b.getDate();
}

export function addDays(d, n) {
    const x = new Date(d);
    x.setDate(x.getDate() + n);
    return startOfDay(x);
}

/** Poniedziałek jako pierwszy dzień tygodnia (PL) */
export function startOfWeekMonday(d) {
    const date = startOfDay(d);
    const day = date.getDay();
    const diff = day === 0 ? -6 : 1 - day;
    return addDays(date, diff);
}

export function startOfMonth(d) {
    const x = new Date(d.getFullYear(), d.getMonth(), 1);
    return startOfDay(x);
}

export function addMonths(d, n) {
    const x = new Date(d);
    x.setMonth(x.getMonth() + n);
    return startOfDay(x);
}

export function addWeeks(d, n) {
    return addDays(d, n * 7);
}

export function weekContains(weekStart, d) {
    const t = startOfDay(d).getTime();
    const ws = weekStart.getTime();
    const we = addDays(weekStart, 6).getTime();
    return t >= ws && t <= we;
}

export function sameMonth(a, b) {
    return a.getMonth() === b.getMonth() && a.getFullYear() === b.getFullYear();
}
