plugins {
    id 'org.jetbrains.kotlin.jvm' version'1.3.10'
    id 'com.google.protobuf' version '0.8.8'

    // Generate IntelliJ IDEA's .idea & .iml project files
    // Starting with 0.8.4 of protobuf-gradle-plugin, *.proto and the gen output files are added
    // to IntelliJ as sources. It is no longer necessary to add them manually to the idea {} block
    // to jump to definitions from Java and Kotlin files.
    // For best results, install the Protobuf and Kotlin plugins for IntelliJ.
    id 'idea'

    // Provide convenience executables for trying out the examples.
    id 'application'
}

repositories {
    google()
    jcenter()
    mavenCentral()
    mavenLocal()
}

// IMPORTANT: You probably want the non-SNAPSHOT version of gRPC. Make sure you
// are looking at a tagged version of the example and not "master"!

// Feel free to delete the comment at the next line. It is just for safely
// updating the version in our release process.
def grpcVersion = '1.29.0-SNAPSHOT' // CURRENT_GRPC_VERSION

dependencies {
    def kotlinVersion = plugins.findPlugin("org.jetbrains.kotlin.jvm").kotlinPluginVersion
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${kotlinVersion}"
    implementation "io.grpc:grpc-netty-shaded:${grpcVersion}"
    implementation "io.grpc:grpc-protobuf:${grpcVersion}"
    implementation "io.grpc:grpc-stub:${grpcVersion}"
    compileOnly "javax.annotation:javax.annotation-api:1.2"

    testImplementation "io.grpc:grpc-testing:${grpcVersion}" // gRCP testing utilities
    testImplementation "junit:junit:4.12"
    testImplementation "org.mockito:mockito-core:2.28.2"
}

protobuf {
    protoc { artifact = 'com.google.protobuf:protoc:3.11.0' }
    plugins {
        grpc { artifact = "io.grpc:protoc-gen-grpc-java:${grpcVersion}" }
    }
    generateProtoTasks {
        all()*.plugins { grpc {} }
    }
}

startScripts.enabled = false

task helloWorldServer(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.helloworld.HelloWorldServer'
    applicationName = 'hello-world-server'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = startScripts.classpath
}

task helloWorldClient(type: CreateStartScripts) {
    mainClassName = 'io.grpc.examples.helloworld.HelloWorldClient'
    applicationName = 'hello-world-client'
    outputDir = new File(project.buildDir, 'tmp')
    classpath = startScripts.classpath
}

applicationDistribution.into('bin') {
    from(helloWorldServer)
    from(helloWorldClient)
    fileMode = 0755
}
