import { normalizeUnits, normalizeObjectUnits } from '../units/aliases'; import { getPrioritizedUnits } from '../units/priorities'; import { hooks } from '../utils/hooks'; import isFunction from '../utils/is-function';

export function makeGetSet (unit, keepTime) {

return function (value) {
    if (value != null) {
        set(this, unit, value);
        hooks.updateOffset(this, keepTime);
        return this;
    } else {
        return get(this, unit);
    }
};

}

export function get (mom, unit) {

return mom.isValid() ?
    mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;

}

export function set (mom, unit, value) {

if (mom.isValid()) {
    mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);
}

}

// MOMENTS

export function stringGet (units) {

units = normalizeUnits(units);
if (isFunction(this[units])) {
    return this[units]();
}
return this;

}

export function stringSet (units, value) {

if (typeof units === 'object') {
    units = normalizeObjectUnits(units);
    var prioritized = getPrioritizedUnits(units);
    for (var i = 0; i < prioritized.length; i++) {
        this[prioritized[i].unit](units[prioritized[i].unit]);
    }
} else {
    units = normalizeUnits(units);
    if (isFunction(this[units])) {
        return this[units](value);
    }
}
return this;

}