import java.util.jar.JarFile

plugins {
    id "java"
    id "maven-publish"

    id "com.github.johnrengelman.shadow"
    id "com.google.protobuf"
    id "ru.vyarus.animalsniffer"
}

description = "gRPC: XDS plugin"

sourceSets {
    thirdparty {
        java {
            srcDir "${projectDir}/third_party/zero-allocation-hashing/main/java"
        }
        proto {
            srcDir 'third_party/envoy/src/main/proto'
            srcDir 'third_party/protoc-gen-validate/src/main/proto'
            srcDir 'third_party/xds/src/main/proto'
            srcDir 'third_party/googleapis/src/main/proto'
            srcDir 'third_party/istio/src/main/proto'
        }
    }
    test {
        java {
            srcDir "${projectDir}/third_party/zero-allocation-hashing/test/java"
        }
    }
}

configurations {
    pomDeps {
        extendsFrom configurations.thirdpartyRuntimeClasspath, configurations.shadow
    }
}

dependencies {
    thirdpartyCompileOnly libraries.javax.annotation
    thirdpartyImplementation project(':grpc-protobuf'),
            project(':grpc-stub'),
            libraries.opencensus.proto
    implementation sourceSets.thirdparty.output
    implementation project(':grpc-stub'),
            project(':grpc-core'),
            project(':grpc-services'),
            project(':grpc-auth'),
            project(path: ':grpc-alts', configuration: 'shadow'),
            libraries.gson,
            libraries.re2j,
            libraries.auto.value.annotations,
            libraries.protobuf.java.util
    def nettyDependency = implementation project(':grpc-netty')

    testImplementation project(':grpc-rls')
    testImplementation testFixtures(project(':grpc-core'))

    annotationProcessor libraries.auto.value
    // At runtime use the epoll included in grpc-netty-shaded
    compileOnly libraries.netty.transport.epoll

    testImplementation project(':grpc-testing'),
            project(':grpc-testing-proto')
    testImplementation (libraries.netty.transport.epoll) {
        artifact {
            classifier = "linux-x86_64"
        }
    }
    testImplementation (libraries.guava.testlib) {
        exclude group: 'junit', module: 'junit'
    }

    shadow configurations.implementation.getDependencies().minus([nettyDependency])
    shadow project(path: ':grpc-netty-shaded', configuration: 'shadow')

    signature libraries.signature.java
    testRuntimeOnly libraries.netty.tcnative,
            libraries.netty.tcnative.classes
    testRuntimeOnly (libraries.netty.tcnative) {
        artifact {
            classifier = "linux-x86_64"
        }
    }
    testRuntimeOnly (libraries.netty.tcnative) {
        artifact {
            classifier = "linux-aarch_64"
        }
    }
    testRuntimeOnly (libraries.netty.tcnative) {
        artifact {
            classifier = "osx-x86_64"
        }
    }
    testRuntimeOnly (libraries.netty.tcnative) {
        artifact {
            classifier = "osx-aarch_64"
        }
    }
    testRuntimeOnly (libraries.netty.tcnative) {
        artifact {
            classifier = "windows-x86_64"
        }
    }
}

configureProtoCompilation()

tasks.named("compileThirdpartyJava").configure {
    options.errorprone.enabled = false
    options.compilerArgs += [
        // valueOf(int) in RoutingPriority has been deprecated
        "-Xlint:-deprecation",
    ]
}

tasks.named("checkstyleThirdparty").configure {
    enabled = false
}

tasks.named("compileJava").configure {
    it.options.compilerArgs += [
        // TODO: remove
        "-Xlint:-deprecation",
        // only has AutoValue annotation processor
        "-Xlint:-processing",
    ]
    appendToProperty(
            it.options.errorprone.excludedPaths,
            ".*/build/generated/sources/annotationProcessor/java/.*",
            "|")
    // remove after upgrade error-prone
    appendToProperty(
            it.options.errorprone.excludedPaths,
            ".*/build/tmp/compileJava/compileTransaction/annotation-output/io/grpc/xds/.*",
            "|")
}

tasks.named("jar").configure {
    archiveClassifier = 'original'
    from sourceSets.thirdparty.output
}

tasks.named("javadoc").configure {
    // Exclusions here should generally also be relocated
    exclude 'com/github/udpa/**'
    exclude 'com/github/xds/**'
    exclude 'com/google/security/**'
    exclude 'io/envoyproxy/**'
    // Need to clean up the class structure to reduce how much is exposed
    exclude 'io/grpc/xds/*LoadBalancer*'
    exclude 'io/grpc/xds/Bootstrapper.java'
    exclude 'io/grpc/xds/Envoy*'
    exclude 'io/grpc/xds/FilterChainMatchingProtocolNegotiators.java'
    exclude 'io/grpc/xds/TlsContextManager.java'
    exclude 'io/grpc/xds/XdsAttributes.java'
    exclude 'io/grpc/xds/XdsInitializationException.java'
    exclude 'io/grpc/xds/XdsNameResolverProvider.java'
    exclude 'io/grpc/xds/internal/**'
    exclude 'io/grpc/xds/Internal*'
}

def prefixName = 'io.grpc.xds'
tasks.named("shadowJar").configure {
    archiveClassifier = null
    dependencies {
        include(project(':grpc-xds'))
    }
    // Relocated packages commonly need exclusions in jacocoTestReport and javadoc
    relocate 'com.github.udpa', "${prefixName}.shaded.com.github.udpa"
    relocate 'com.github.xds', "${prefixName}.shaded.com.github.xds"
    relocate 'com.google.api.expr', "${prefixName}.shaded.com.google.api.expr"
    relocate 'com.google.security', "${prefixName}.shaded.com.google.security"
    // TODO: missing java_package option in .proto
    relocate 'envoy.annotations', "${prefixName}.shaded.envoy.annotations"
    relocate 'io.envoyproxy', "${prefixName}.shaded.io.envoyproxy"
    relocate 'io.grpc.netty', 'io.grpc.netty.shaded.io.grpc.netty'
    relocate 'io.netty', 'io.grpc.netty.shaded.io.netty'
    // TODO: missing java_package option in .proto
    relocate 'udpa.annotations', "${prefixName}.shaded.udpa.annotations"
    relocate 'xds.annotations', "${prefixName}.shaded.xds.annotations"
    exclude "**/*.proto"
}

def checkPackageLeakage = tasks.register("checkPackageLeakage") {
    inputs.files(shadowJar).withNormalizer(CompileClasspathNormalizer)
    outputs.file("${buildDir}/tmp/${name}") // Fake output for UP-TO-DATE checking
    doLast {
        def jarEntryPrefixName = prefixName.replaceAll('\\.', '/')
        shadowJar.outputs.getFiles().each { jar ->
            def package_leak_detected = false
            JarFile jf = new JarFile(jar)
            jf.entries().each { entry ->
                if (entry.name.endsWith(".class") && !entry.name.startsWith(
                        jarEntryPrefixName)) {
                    package_leak_detected = true
                    println "WARNING: package leaked, may need relocation: " +
                            entry.name
                }
            }
            jf.close()
            if (package_leak_detected) {
                throw new TaskExecutionException(shadowJar,
                        new IllegalStateException("Resource leakage detected!"))
            }
        }
    }
}

tasks.named("test").configure {
    dependsOn checkPackageLeakage
}

tasks.named("jacocoTestReport").configure {
    classDirectories.from = sourceSets.main.output.collect {
        fileTree(dir: it,
        exclude: [ // Exclusions here should generally also be relocated
                '**/com/github/udpa/**',
                '**/com/github/xds/**',
                '**/com/google/api/expr/**',
                '**/com/google/security/**',
                '**/envoy/annotations/**',
                '**/io/envoyproxy/**',
                '**/udpa/annotations/**',
                '**/xds/annotations/**',
        ])
    }
}

publishing {
    publications {
        maven(MavenPublication) {
            // We want this to throw an exception if it isn't working
            def originalJar = artifacts.find { dep -> dep.classifier == 'original'}
            artifacts.remove(originalJar)

            pom.withXml {
                def dependenciesNode = new Node(null, 'dependencies')
                project.configurations.pomDeps.allDependencies.each { dep ->
                    if (dep.group == null && dep.name == 'unspecified') {
                        // Ignore the thirdparty self-dependency
                        return;
                    }
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', dep.group)
                    dependencyNode.appendNode('artifactId', dep.name)
                    dependencyNode.appendNode('version', dep.version)
                    dependencyNode.appendNode('scope', 'compile')
                }
                asNode().dependencies[0].replaceNode(dependenciesNode)
            }
        }
    }
}
