module.exports = function (grunt) {
    grunt.loadNpmTasks('grunt-typescript');
    grunt.loadNpmTasks('grunt-contrib-watch');
    grunt.loadNpmTasks('grunt-contrib-copy');

    var wrapPhaserInUmd = function(content, isAddon) {
        var replacement = [
            '(function (root, factory) {',
            '    if (typeof exports === \'object\') {',
            '        module.exports = factory();',
            '    } else if (typeof define === \'function\' && define.amd) {',
            '        define(factory);',
            '    } else {',
            '        root.Phaser = factory();',
            '  }',
            '}(this, function () {',
            content,
            'return Phaser;',
            '}));'
        ];
        return replacement.join('\n');
    };

    var wrapAddonInUmd = function(content) {
        var replacement = [
            '(function (root, factory) {',
            '    if (typeof exports === \'object\') {',
            '        module.exports = factory(require(\'phaser\'));',
            '    } else if (typeof define === \'function\' && define.amd) {',
            '        define([\'phaser\'], factory);',
            '    } else {',
            '        factory(root.Phaser);',
            '  }',
            '}(this, function (Phaser) {',
            content,
            'return Phaser;',
            '}));'
        ];
        return replacement.join('\n');
    };

    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        typescript: {
            base: {
                src: ['Phaser/**/*.ts'],
                dest: 'build/phaser.js',
                options: {
                    target: 'ES5',
                    declaration: true,
                    comments: true
                }
            },
	    //tests: {
	//	src: ['Tests/**/*.ts'],
	//	options: {
	//	    target: 'ES5',
	//	    declaration: true,
	//	    comments: true
	//	}
	  //  }
            //fx: {
            //    src: ['SpecialFX/**/*.ts'],
            //    dest: 'build/phaser-fx.js',
            //    options: {
            //        target: 'ES5',
            //        declaration: true,
            //        comments: true
            //    }
            //}
        },
        copy: {
            main: {
                files: [{
                    src: 'build/phaser.js',
                    dest: 'Tests/phaser.js'
                }]
            },
            fx: {
                files: [{
                    src: 'build/phaser-fx.js',
                    dest: 'Tests/phaser-fx.js'
                }]
            },
            mainAmd: {
                files: [{
                    src: 'build/phaser.js',
                    dest: 'build/phaser.amd.js'
                }],
                options: {
                    processContent: wrapPhaserInUmd
                }
            },
            fxAmd: {
                files: [{
                    src: 'build/phaser-fx.js',
                    dest: 'build/phaser-fx.amd.js'
                }],
                options: {
                    processContent: wrapAddonInUmd
                }
            }
        },
        watch: {
            files: '**/*.ts',
            tasks: ['typescript', 'copy']
        }
    });

    grunt.registerTask('default', ['typescript', 'copy', 'watch']);

}
