/*
 * Copyright 2015-2016 IBM Corporation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

var ok_ = require('./repl-messages').ok_,
    options = {};

exports.options = options;

exports.update = function update(key, f, wskprops, next, value) {
    if (value !== undefined) {
	options[key] = value === 'true' || value === 't' || value === 'yes' || value === 'y' || value === 'on'
	    ? true : false;
    }

    console.log('Option ' + key + ' set to ' + ('' + (options[key] || false)).red);
    ok_(next);
};
