import * as __WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__ from "@tachybase/utils/client";
const toStringByPicker = (value, picker, timezone)=>{
    if (!__WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.dayjs.isDayjs(value)) return value;
    if ('local' === timezone) {
        const offset = new Date().getTimezoneOffset();
        return (0, __WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.dayjs)(toStringByPicker(value, picker, 'gmt')).add(offset, 'minutes').toISOString();
    }
    if ('year' === picker) return value.format('YYYY') + '-01-01T00:00:00.000Z';
    if ('month' === picker) return value.format('YYYY-MM') + '-01T00:00:00.000Z';
    if ('quarter' === picker) return value.startOf('quarter').format('YYYY-MM') + '-01T00:00:00.000Z';
    if ('week' === picker) return value.startOf('week').add(1, 'day').format('YYYY-MM-DD') + 'T00:00:00.000Z';
    return value.format('YYYY-MM-DDTHH:mm:ss.SSS') + 'Z';
};
const toGmtByPicker = (value, picker)=>{
    if (!value || !__WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.dayjs.isDayjs(value)) return value;
    return toStringByPicker(value, picker, 'gmt');
};
const toLocalByPicker = (value, picker)=>{
    if (!value || !__WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.dayjs.isDayjs(value)) return value;
    return toStringByPicker(value, picker, 'local');
};
const moment2str = function(value) {
    let options = arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : {};
    const { showTime, gmt, picker, utc = true } = options;
    if (!value) return value;
    if (!utc) {
        const format = showTime ? 'YYYY-MM-DD HH:mm:ss' : 'YYYY-MM-DD';
        return value.format(format);
    }
    if (showTime) return gmt ? (0, __WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.toGmt)(value) : (0, __WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.toLocal)(value);
    if ('boolean' == typeof gmt) return gmt ? toGmtByPicker(value, picker) : toLocalByPicker(value, picker);
    return toGmtByPicker(value, picker);
};
const mapDatePicker = function() {
    return (props)=>{
        const format = (0, __WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.getDefaultFormat)(props);
        const onChange = props.onChange;
        return {
            ...props,
            format: format,
            value: (0, __WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.str2moment)(props.value, props),
            onChange: (value)=>{
                if (onChange) {
                    if (!props.showTime && value) value = value.startOf('day');
                    onChange(moment2str(value, props));
                }
            }
        };
    };
};
const mapRangePicker = function() {
    return (props)=>{
        const format = (0, __WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.getDefaultFormat)(props);
        const onChange = props.onChange;
        return {
            ...props,
            format: format,
            value: (0, __WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.str2moment)(props.value, props),
            onChange: (value)=>{
                if (onChange) onChange(value ? [
                    moment2str(getRangeStart(value[0], props), props),
                    moment2str(getRangeEnd(value[1], props), props)
                ] : []);
            }
        };
    };
};
function getRangeStart(value, options) {
    const { showTime } = options;
    if (showTime) return value;
    return value.startOf('day');
}
function getRangeEnd(value, options) {
    const { showTime } = options;
    if (showTime) return value;
    return value.endOf('day');
}
const getStart = (offset, unit)=>(0, __WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.dayjs)().add(offset, 'isoWeek' === unit ? 'week' : unit).startOf(unit);
const getEnd = (offset, unit)=>(0, __WEBPACK_EXTERNAL_MODULE__tachybase_utils_client__.dayjs)().add(offset, 'isoWeek' === unit ? 'week' : unit).endOf(unit);
const getDateRanges = ()=>({
        today: ()=>[
                getStart(0, 'day'),
                getEnd(0, 'day')
            ],
        lastWeek: ()=>[
                getStart(-1, 'isoWeek'),
                getEnd(-1, 'isoWeek')
            ],
        thisWeek: ()=>[
                getStart(0, 'isoWeek'),
                getEnd(0, 'isoWeek')
            ],
        nextWeek: ()=>[
                getStart(1, 'isoWeek'),
                getEnd(1, 'isoWeek')
            ],
        lastMonth: ()=>[
                getStart(-1, 'month'),
                getEnd(-1, 'month')
            ],
        thisMonth: ()=>[
                getStart(0, 'month'),
                getEnd(0, 'month')
            ],
        nextMonth: ()=>[
                getStart(1, 'month'),
                getEnd(1, 'month')
            ],
        lastQuarter: ()=>[
                getStart(-1, 'quarter'),
                getEnd(-1, 'quarter')
            ],
        thisQuarter: ()=>[
                getStart(0, 'quarter'),
                getEnd(0, 'quarter')
            ],
        nextQuarter: ()=>[
                getStart(1, 'quarter'),
                getEnd(1, 'quarter')
            ],
        lastYear: ()=>[
                getStart(-1, 'year'),
                getEnd(-1, 'year')
            ],
        thisYear: ()=>[
                getStart(0, 'year'),
                getEnd(0, 'year')
            ],
        nextYear: ()=>[
                getStart(1, 'year'),
                getEnd(1, 'year')
            ],
        last7Days: ()=>[
                getStart(-6, 'days'),
                getEnd(0, 'days')
            ],
        next7Days: ()=>[
                getStart(1, 'day'),
                getEnd(7, 'days')
            ],
        last30Days: ()=>[
                getStart(-29, 'days'),
                getEnd(0, 'days')
            ],
        next30Days: ()=>[
                getStart(1, 'day'),
                getEnd(30, 'days')
            ],
        last90Days: ()=>[
                getStart(-89, 'days'),
                getEnd(0, 'days')
            ],
        next90Days: ()=>[
                getStart(1, 'day'),
                getEnd(90, 'days')
            ]
    });
export { getDateRanges, mapDatePicker, mapRangePicker, moment2str };
