import { copyConfig } from '../moment/constructor'; import { configFromStringAndFormat } from './from-string-and-format'; import getParsingFlags from './parsing-flags'; import { isValid } from './valid'; import extend from '../utils/extend';

// date from string and array of format strings export function configFromStringAndArray(config) {

var tempConfig,
    bestMoment,

    scoreToBeat,
    i,
    currentScore;

if (config._f.length === 0) {
    getParsingFlags(config).invalidFormat = true;
    config._d = new Date(NaN);
    return;
}

for (i = 0; i < config._f.length; i++) {
    currentScore = 0;
    tempConfig = copyConfig({}, config);
    if (config._useUTC != null) {
        tempConfig._useUTC = config._useUTC;
    }
    tempConfig._f = config._f[i];
    configFromStringAndFormat(tempConfig);

    if (!isValid(tempConfig)) {
        continue;
    }

    // if there is any input that was not parsed add a penalty for that format
    currentScore += getParsingFlags(tempConfig).charsLeftOver;

    //or tokens
    currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;

    getParsingFlags(tempConfig).score = currentScore;

    if (scoreToBeat == null || currentScore < scoreToBeat) {
        scoreToBeat = currentScore;
        bestMoment = tempConfig;
    }
}

extend(config, bestMoment || tempConfig);

}