apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'idea'
apply plugin: 'net.corda.plugins.quasar-utils'
apply plugin: 'net.corda.plugins.cordapp'
apply plugin: 'net.corda.plugins.cordformation'

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"

    // The bank of corda CorDapp depends upon Cash CorDapp features
    cordapp project(':finance:contracts')
    cordapp project(':finance:workflows')

    // Cordformation needs a SLF4J implementation when executing the Network
    // Bootstrapper, but Log4J doesn't shutdown completely from within Gradle.
    // Use a much simpler SLF4J implementation here instead.
    cordaRuntime "org.slf4j:slf4j-simple:$slf4j_version"

    // Corda integration dependencies
    cordaRuntime project(path: ":node:capsule", configuration: 'runtimeArtifacts')
    cordaRuntime project(path: ":testing:testserver:testcapsule:", configuration: 'runtimeArtifacts')
    cordaCompile project(':core')
    cordaCompile project(':client:jfx')
    cordaCompile project(':client:rpc')
    cordaCompile(project(':testing:testserver')) {
        exclude group: "org.apache.logging.log4j"
    }
    cordaCompile (project(':node-driver')) {
        exclude group: "org.apache.logging.log4j"
    }

    // Javax is required for webapis
    compile "org.glassfish.jersey.core:jersey-server:${jersey_version}"

    // Test dependencies
    testImplementation "org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}"
    testImplementation "junit:junit:$junit_version"

    testRuntimeOnly "org.junit.vintage:junit-vintage-engine:${junit_vintage_version}"
    testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junit_jupiter_version}"
    testRuntimeOnly "org.junit.platform:junit-platform-launcher:${junit_platform_version}"
}

def nodeTask = tasks.getByPath(':node:capsule:assemble')
def webTask = tasks.getByPath(':testing:testserver:testcapsule::assemble')
task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar', nodeTask, webTask]) {
    nodeDefaults {
        cordapp project(':finance:workflows')
        cordapp project(':finance:contracts')
    }
    node {
        name "O=Notary Service,L=Zurich,C=CH"
        notary = [validating: true]
        p2pPort 10002
        rpcSettings {
            address "localhost:10003"
            adminAddress "localhost:10004"
        }
        extraConfig = [h2Settings: [address: "localhost:10016"]]
    }
    node {
        name "O=BankOfCorda,L=London,C=GB"
        p2pPort 10005
        rpcSettings {
            address "localhost:10006"
            adminAddress "localhost:10015"
        }
        webPort 10007
        rpcUsers = [[user: "bankUser", password: "test", permissions: ["ALL"]]]
        extraConfig = [
                h2Settings: [address: "localhost:10017"]
        ]
        cordapp(project(':finance:workflows')) {
            config "issuableCurrencies = [ USD ]"
        }
    }
    node {
        name "O=BigCorporation,L=New York,C=US"
        p2pPort 10008
        rpcSettings {
            address "localhost:10009"
            adminAddress "localhost:10011"
        }
        webPort 10010
        rpcUsers = [[user: "bigCorpUser", password: "test", permissions: ["ALL"]]]
        extraConfig = [
                h2Settings: [address: "localhost:10018"]
        ]
    }
}

idea {
    module {
        downloadJavadoc = true // defaults to false
        downloadSources = true
    }
}

task runRPCCashIssue(type: JavaExec) {
    classpath = sourceSets.main.runtimeClasspath
    main = 'net.corda.bank.IssueCash'
    args '--role'
    args 'ISSUE_CASH_RPC'
    args '--quantity'
    args 20000
    args '--currency'
    args 'USD'
}

task runWebCashIssue(type: JavaExec) {
    classpath = sourceSets.main.runtimeClasspath
    main = 'net.corda.bank.IssueCash'
    args '--role'
    args 'ISSUE_CASH_WEB'
    args '--quantity'
    args 30000
    args '--currency'
    args 'GBP'
}

jar {
    manifest {
        attributes(
                'Automatic-Module-Name': 'net.corda.samples.demos.bankofcorda'
        )
    }
}

cordapp {
    targetPlatformVersion corda_platform_version.toInteger()
    minimumPlatformVersion 1
    info {
        name "Bank of Corda Demo"
        version "1"
        vendor "R3"
    }
}
