#!/usr/bin/env node

/*
 *
 * Copyright 2013 Canonical Ltd.
 *
 * 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 path = require('path');
var build = require('./lib/build').build;
var check_reqs = require('./lib/check_reqs').check_reqs;
var PLATFORMS = require('./lib/constants').PLATFORM_TYPES;

var root = path.resolve();
var www = path.join(root, 'www');

check_reqs(function () {
    var argv = require('optimist').boolean(['verbose', 'device']).string(['framework']).argv;
    if (argv.verbose) {
      require('./lib/config').verboseMode();
    }

    var platform = (argv.device) ?  PLATFORMS.PHONE : PLATFORMS.DESKTOP;
    
    return build(root, platform, false, undefined, argv.framework, false);
});
