// build.gradle.kts — Gradle build для crypto-service.
//
// Артефакт: ./build/libs/crypto-service-0.1.0-all.jar (shadow jar).
// Запуск:
//   java -Djava.library.path=/opt/Validata/VDCSP/lib/amd64 \
//        -jar crypto-service-0.1.0-all.jar
//
// Зависимости:
//   - grpc-java (server + protoc-gen-java) — Maven Central
//   - protobuf-java — Maven Central
//   - apache santuario (XMLDSig) — Maven Central
//   - Pki1.LocalIface.jar (Валидата JNI) — libs/ (положен из
//     /opt/Validata/VDCSP/lib/)
//
// Java toolchain — 17 (LTS), на Astra 1.7 ставится из openjdk-17-jdk.

import com.google.protobuf.gradle.id

plugins {
    id("java")
    id("application")
    id("com.google.protobuf") version "0.9.4"
    id("com.github.johnrengelman.shadow") version "8.1.1"
}

group = "ru.zetit.bridgeandjoins"
version = "0.1.0"

java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(17))
    }
}

repositories {
    mavenCentral()
    flatDir { dirs("libs") } // Pki1.LocalIface.jar (Валидата)
}

dependencies {
    val grpcVer = "1.62.2"
    val protobufVer = "3.25.3"

    implementation("io.grpc:grpc-netty-shaded:$grpcVer")
    implementation("io.grpc:grpc-protobuf:$grpcVer")
    implementation("io.grpc:grpc-stub:$grpcVer")
    implementation("com.google.protobuf:protobuf-java:$protobufVer")

    // XMLDSig — построение/разбор подписи. ГОСТ-алгоритмы реализуем сами
    // (digest + signature через VCERT_*), Santuario используем только для
    // канонизации и сборки XML-структуры.
    implementation("org.apache.santuario:xmlsec:3.0.4")

    // Валидата Клиент L — Pki1.LocalIface.jar.
    implementation(files("libs/Pki1.LocalIface.jar"))

    compileOnly("javax.annotation:javax.annotation-api:1.3.2")
    implementation("ch.qos.logback:logback-classic:1.5.6")

    testImplementation("org.junit.jupiter:junit-jupiter:5.10.2")
    testImplementation("io.grpc:grpc-testing:$grpcVer")
}

application {
    mainClass.set("ru.zetit.bridgeandjoins.crypto.CryptoServer")
    applicationDefaultJvmArgs = listOf(
        "-Djava.library.path=/opt/Validata/VDCSP/lib/amd64",
    )
}

protobuf {
    protoc {
        artifact = "com.google.protobuf:protoc:3.25.3"
    }
    plugins {
        id("grpc") {
            artifact = "io.grpc:protoc-gen-grpc-java:1.62.2"
        }
    }
    generateProtoTasks {
        all().forEach { task ->
            task.plugins {
                id("grpc")
            }
        }
    }
}

sourceSets {
    main {
        proto {
            srcDir("proto")
        }
    }
}

tasks.withType<Test> {
    useJUnitPlatform()
}
