if (release != 'rtm') {
    version += "-$release"
}

if(!npmName)
    npmName = name;

ext.packageName="$npmScope/$npmName";

def packageDir = "$buildDir/dist"
def distDir = "$packageDir/$platform"
def testDir = "$packageDir/$platform"

task printVersion {
    doLast {
        println "version: $version"
        println "packageName: $packageName"
        println "platform: $platform"
    }
}


task clean {
    doLast {
        delete buildDir
        delete "node_modules/$packageName"
    }
}

task cleanNpm {
    doLast {
        delete 'node_modules'
    }
}

task _npmInstall() {
    inputs.file("package.json")
    outputs.dir("node_modules")
    doLast {
        exec {
            commandLine 'npm', 'install'
        }
    }
}

task _legacyJs(type:Copy) {
    from 'src/main/js/'
    into distDir
}

task _buildTs(dependsOn: _npmInstall, type:Exec) {
    inputs.dir('src/main/ts')
    inputs.file('src/tsconfig.json')
    inputs.file('src/main/tsconfig.json')
    outputs.dir(distDir)

    commandLine 'node_modules/.bin/tsc',
        '-p', 'src/main/tsconfig.json',
        '--outDir', distDir
}

task _packageMeta(type: Copy) {
    inputs.property("version", version)
    from('.') {
        include 'package.json', '.npmignore', 'readme.md', 'license', 'history.md'
    }
    into distDir
    doLast {
        exec {
            workingDir distDir
            commandLine 'npm', 'version', version
        }
    }
}

task build(dependsOn: [_legacyJs, _npmInstall, _buildTs, _packageMeta]) {

}

task _localInstall(dependsOn: build, type: Exec) {
    inputs.file("$distDir/package.json")
    outputs.upToDateWhen {
        new File("$projectDir/node_modules/$packageName").exists()
    }

    commandLine 'npm', 'install', '--no-save', '--force', distDir
}

task copyJsTests(type: Copy) {
    from 'test/js'
    into testDir
}

task buildTests(dependsOn: _localInstall, type: Exec) {
    inputs.dir('test/ts')
    inputs.file('test/tsconfig.json')
    outputs.dir(testDir)
    
    commandLine 'node_modules/.bin/tsc', '-p', 'test/tsconfig.json', '--outDir', distDir
}

task test(dependsOn: [copyJsTests, buildTests], type: Exec) {
    commandLine 'node', 'run-amd-tests.js'
}

task pack(dependsOn: build, type: Exec) {
    workingDir = distDir

    commandLine 'npm', 'pack'
}