"use client";
import { useCallback, useMemo, useState } from "react";
export default function useTime(initial) {
    const [date, setDate] = useState({
        secs: initial?.secs || 0,
        days: initial?.days || 0,
        weeks: initial?.weeks || 0,
        months: initial?.months || 0,
        years: initial?.years || 0,
    });
    const times = useMemo(() => ({
        day: 86_400,
        week: 604_800,
        month: 2_628_000,
        year: 31_536_000,
    }), []);
    const resolve = useCallback((time, type) => {
        switch (type) {
            case 'days':
                time *= times.day;
                break;
            case 'weeks':
                time *= times.week;
                break;
            case 'months':
                time *= times.month;
                break;
            case 'years':
                time *= times.year;
                break;
        }
        return parseInt(time?.toString());
    }, [times]);
    const sec = useCallback((...args) => {
        const secs = resolve((args?.length > 1 && typeof args[1] === 'number') ? args[1] - args[0] : args[0], (args?.length === 3 && typeof args[2] === 'string') ? args[2] : (args?.length === 2 && typeof args[1] === 'string') ? args[1] : undefined);
        return {
            secs,
            days: secs / times.day,
            weeks: secs / times.week,
            months: secs / times.month,
            years: secs / times.year,
        };
    }, [resolve, times.day, times.week, times.month, times.year]);
    const day = useCallback((...args) => ({ ...sec(...args) }), [sec]);
    const week = useCallback((...args) => ({ ...sec(...args) }), [sec]);
    const month = useCallback((...args) => ({ ...sec(...args) }), [sec]);
    const year = useCallback((...args) => ({ ...sec(...args) }), [sec]);
    const set = useCallback((time, type) => {
        const date = sec(time, type);
        setDate(date);
        return date;
    }, [sec]);
    const secs = useCallback((time) => set(time), [set]);
    const days = useCallback((time) => set(time, 'days'), [set]);
    const weeks = useCallback((time) => set(time, 'weeks'), [set]);
    const months = useCallback((time) => set(time, 'months'), [set]);
    const years = useCallback((time) => set(time, 'years'), [set]);
    const now = useMemo(() => Math.floor(Date.now() / 1000), []);
    const end = useMemo(() => now + date.secs, [now, date]);
    const when = useCallback((...args) => now + sec(...args).secs, [now, sec]);
    return {
        date,
        now,
        end,
        when,
        sec,
        secs,
        day,
        days,
        week,
        weeks,
        month,
        months,
        year,
        years,
    };
}
//# sourceMappingURL=useTime.jsx.map