import isNumber from '../utils/is-number'; import { getLocale } from './locales'; import { createUTC } from '../create/utc';

function get (format, index, field, setter) {

var locale = getLocale();
var utc = createUTC().set(setter, index);
return locale[field](utc, format);

}

function listMonthsImpl (format, index, field) {

if (isNumber(format)) {
    index = format;
    format = undefined;
}

format = format || '';

if (index != null) {
    return get(format, index, field, 'month');
}

var i;
var out = [];
for (i = 0; i < 12; i++) {
    out[i] = get(format, i, field, 'month');
}
return out;

}

// () // (5) // (fmt, 5) // (fmt) // (true) // (true, 5) // (true, fmt, 5) // (true, fmt) function listWeekdaysImpl (localeSorted, format, index, field) {

if (typeof localeSorted === 'boolean') {
    if (isNumber(format)) {
        index = format;
        format = undefined;
    }

    format = format || '';
} else {
    format = localeSorted;
    index = format;
    localeSorted = false;

    if (isNumber(format)) {
        index = format;
        format = undefined;
    }

    format = format || '';
}

var locale = getLocale(),
    shift = localeSorted ? locale._week.dow : 0;

if (index != null) {
    return get(format, (index + shift) % 7, field, 'day');
}

var i;
var out = [];
for (i = 0; i < 7; i++) {
    out[i] = get(format, (i + shift) % 7, field, 'day');
}
return out;

}

export function listMonths (format, index) {

return listMonthsImpl(format, index, 'months');

}

export function listMonthsShort (format, index) {

return listMonthsImpl(format, index, 'monthsShort');

}

export function listWeekdays (localeSorted, format, index) {

return listWeekdaysImpl(localeSorted, format, index, 'weekdays');

}

export function listWeekdaysShort (localeSorted, format, index) {

return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');

}

export function listWeekdaysMin (localeSorted, format, index) {

return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');

}