plugins {
    // Provide convenience executables for trying out the examples.
    id 'application'
    id 'com.google.protobuf' version '0.9.5'
    // Generate IntelliJ IDEA's .idea & .iml project files
    id 'idea'
}

repositories {
    mavenCentral()
    mavenLocal()
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

// 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.74.0-SNAPSHOT' // CURRENT_GRPC_VERSION
def protobufVersion = '3.25.5'
def protocVersion = protobufVersion

dependencies {
    implementation "io.grpc:grpc-protobuf:${grpcVersion}"
    implementation "io.grpc:grpc-stub:${grpcVersion}"
    implementation "io.grpc:grpc-auth:${grpcVersion}"
    implementation "com.google.auth:google-auth-library-oauth2-http:1.23.0"

    compileOnly "org.apache.tomcat:annotations-api:6.0.53"

    runtimeOnly "io.grpc:grpc-netty-shaded:${grpcVersion}"

    testImplementation "io.grpc:grpc-testing:${grpcVersion}"
    testImplementation "io.grpc:grpc-inprocess:${grpcVersion}"
    testImplementation "junit:junit:4.13.2"
    testImplementation "org.mockito:mockito-core:4.4.0"
}

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

startScripts.enabled = false

task hellowWorldOauthServer(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.oauth.AuthServer'
    applicationName = 'auth-server'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

task hellowWorldOauthClient(type: CreateStartScripts) {
    mainClass = 'io.grpc.examples.oauth.AuthClient'
    applicationName = 'auth-client'
    outputDir = new File(project.buildDir, 'tmp/scripts/' + name)
    classpath = startScripts.classpath
}

application {
    applicationDistribution.into('bin') {
        from(hellowWorldOauthServer)
        from(hellowWorldOauthClient)
        filePermissions {
            unix(0755)
        }
    }
}
