/*
 * Copyright ConsenSys AG.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
 * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations under the License.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

apply plugin: 'java-library'

jar {
  archiveBaseName = 'besu-core'
  manifest {
    attributes(
      'Specification-Title': archiveBaseName,
      'Specification-Version': project.version,
      'Implementation-Title': archiveBaseName,
      'Implementation-Version': calculateVersion(),
      'Commit-Hash': getGitCommitDetails(40).hash
      )
  }
}

dependencies {
  api 'org.slf4j:slf4j-api'
  api 'org.web3j:core'

  annotationProcessor 'org.openjdk.jmh:jmh-generator-annprocess'
  annotationProcessor 'org.hyperledger.besu:besu-errorprone-checks'

  implementation project(':config')
  implementation project(':crypto:algorithms')
  implementation project(':datatypes')
  implementation project(':enclave')
  implementation project(':ethereum:rlp')
  implementation project(':ethereum:trie')
  implementation project(':evm')
  implementation project(':metrics:core')
  implementation project(':plugin-api')
  implementation project(':services:kvstore')


  implementation 'com.fasterxml.jackson.core:jackson-databind'
  implementation 'com.google.guava:guava'
  implementation 'com.github.ben-manes.caffeine:caffeine'
  implementation 'com.google.dagger:dagger'
  implementation 'org.apache.maven:maven-artifact'
  annotationProcessor 'com.google.dagger:dagger-compiler'
  implementation 'io.opentelemetry:opentelemetry-api'
  implementation 'io.vertx:vertx-core'

  implementation 'net.java.dev.jna:jna'
  implementation 'org.apache.commons:commons-lang3'
  implementation 'io.tmio:tuweni-bytes'
  implementation 'io.tmio:tuweni-concurrent'
  implementation 'io.tmio:tuweni-units'
  implementation 'io.tmio:tuweni-rlp'
  implementation 'org.immutables:value-annotations'
  implementation 'tech.pegasys:jc-kzg-4844'

  implementation 'io.prometheus:simpleclient_guava'

  implementation 'org.xerial.snappy:snappy-java'

  annotationProcessor 'org.immutables:value'

  testImplementation project(path: ':config', configuration: 'testSupportArtifacts')
  testImplementation project(path: ':ethereum:api')
  testImplementation project(path: ':ethereum:blockcreation')
  testImplementation project(path: ':ethereum:referencetests')
  testImplementation project(path: ':ethereum:eth')
  testImplementation project(':testutil')
  testImplementation project(path: ':plugins:rocksdb')

  testImplementation 'org.apache.logging.log4j:log4j-core'
  testImplementation 'io.tmio:tuweni-bytes'
  testImplementation 'io.tmio:tuweni-io'
  testImplementation 'io.tmio:tuweni-units'
  testImplementation 'org.assertj:assertj-core'
  testImplementation 'org.junit.jupiter:junit-jupiter'
  testImplementation 'org.junit.jupiter:junit-jupiter-params'
  testImplementation 'org.mockito:mockito-core'
  testImplementation 'org.mockito:mockito-junit-jupiter'
  testImplementation 'org.awaitility:awaitility'

  integrationTestImplementation project(path: ':config', configuration: 'testSupportArtifacts')
  integrationTestImplementation project(':testutil')

  integrationTestImplementation 'org.assertj:assertj-core'
  integrationTestImplementation 'org.junit.jupiter:junit-jupiter-api'
  integrationTestImplementation 'org.mockito:mockito-core'
  integrationTestImplementation 'io.tmio:tuweni-bytes'

  integrationTestRuntimeOnly 'org.junit.jupiter:junit-jupiter'

  testSupportImplementation project(path: ':config', configuration: 'testSupportArtifacts')
  testSupportImplementation project(':ethereum:eth')
  testSupportImplementation project(':testutil')

  testSupportImplementation 'org.junit.jupiter:junit-jupiter'
  testSupportImplementation 'org.assertj:assertj-core'
  testSupportImplementation 'org.mockito:mockito-core'

  jmhImplementation project(path: ':config', configuration: 'testSupportArtifacts')
  jmhImplementation project(':crypto:algorithms')
  jmhImplementation project(path: ':ethereum:core', configuration: 'testSupportArtifacts')
  jmhImplementation project(':ethereum:rlp')
  jmhImplementation project(':ethereum:trie')
  jmhImplementation project(':metrics:core')
  jmhImplementation project(':plugin-api')
  jmhImplementation project(':plugins:rocksdb')
  jmhImplementation project(':services:kvstore')
  jmhImplementation project(':util')

  jmhImplementation 'com.google.guava:guava'
}

configurations { testArtifacts }
task testJar(type: Jar) {
  archiveBaseName = "${project.name}-test"
  from sourceSets.test.output
}

artifacts {
  testArtifacts testJar
  testSupportArtifacts testSupportJar
}
