import sbt._

object Deps {
  object V {
    val bouncyCastle = "1.55"
    val logback = "1.0.13"
    val scalacheck = "1.14.0"
    val scalaTest = "3.0.5"
    val slf4j = "1.7.5"
    val spray = "1.3.2"
    val zeromq = "0.4.3"
    val akkav = "10.1.5"
    val akkaStreamv = "2.5.17"
    val playv = "2.6.10"
    val scodecV = "1.1.6"
    val junitV = "0.11"
    val nativeLoaderV = "2.3.2"
    val typesafeConfigV = "1.3.3"

    val bitcoinsV = "236041-1549541584036-SNAPSHOT"
  }

  object Compile {
    val bouncycastle = "org.bouncycastle" % "bcprov-jdk15on" % V.bouncyCastle withSources() withJavadoc()
    val scodec = "org.scodec" %% "scodec-bits" % V.scodecV withSources() withJavadoc()
    val slf4j = "org.slf4j" % "slf4j-api" % V.slf4j % "provided" withSources() withJavadoc()
    val zeromq = "org.zeromq" % "jeromq" % V.zeromq withSources() withJavadoc()
    val akkaHttp = "com.typesafe.akka" %% "akka-http" % V.akkav withSources() withJavadoc()
    val akkaStream = "com.typesafe.akka" %% "akka-stream" % V.akkaStreamv withSources() withJavadoc()
    val playJson = "com.typesafe.play" %% "play-json" % V.playv withSources() withJavadoc()
    val typesafeConfig = "com.typesafe" % "config" % V.typesafeConfigV withSources() withJavadoc()

    val logback = "ch.qos.logback" % "logback-classic" % V.logback withSources() withJavadoc()

    //for loading secp256k1 natively
    val nativeLoader = "org.scijava" % "native-lib-loader" % V.nativeLoaderV withSources() withJavadoc()
  }

  object Test {
    val bitcoinj = ("org.bitcoinj" % "bitcoinj-core" % "0.14.4" % "test").exclude("org.slf4j", "slf4j-api")
    val junitInterface = "com.novocode" % "junit-interface" % V.junitV % "test" withSources() withJavadoc()
    val logback = "ch.qos.logback" % "logback-classic" % V.logback % "test" withSources() withJavadoc()
    val scalacheck = "org.scalacheck" %% "scalacheck" % V.scalacheck % "test" withSources() withJavadoc()
    val scalaTest = "org.scalatest" %% "scalatest" % V.scalaTest % "test" withSources() withJavadoc()
    val spray = "io.spray" %% "spray-json" % V.spray  % "test" withSources() withJavadoc()
    val akkaHttp = "com.typesafe.akka" %% "akka-http-testkit" % V.akkav % "test" withSources() withJavadoc()
    val akkaStream = "com.typesafe.akka" %% "akka-stream-testkit" % V.akkaStreamv % "test" withSources() withJavadoc()

    val testkit = "org.bitcoins" %% "bitcoin-s-testkit" % V.bitcoinsV % "test" withSources() withJavadoc()
  }

    val core = List(
      Compile.bouncycastle,
      Compile.scodec,
      Compile.slf4j
  )

  val secp256k1jni = List(
    Compile.nativeLoader,
    Test.junitInterface
  )

  val coreGen = List(
    Compile.slf4j,
    Test.scalacheck
  )

  val coreTest = List(
    Test.bitcoinj,
    Test.junitInterface,
    Test.logback,
    Test.scalaTest,
    Test.spray,
    Test.testkit
  )

  val zmq = List(
    Compile.zeromq,
    Compile.slf4j,
    Test.logback,
    Test.scalacheck,
    Test.scalaTest
  )

  val rpc = List(
    Compile.akkaHttp,
    Compile.akkaStream,
    Compile.playJson,
    Compile.slf4j,
    Compile.typesafeConfig,
    Test.akkaHttp,
    Test.akkaStream,
    Test.logback,
    Test.scalaTest,
    Test.scalacheck,
    Test.testkit
  )

  val bench = List(
    "org.slf4j" % "slf4j-api" % V.slf4j withSources() withJavadoc(),
    Compile.logback
  )

  val eclairRpc = List(
    Compile.akkaHttp,
    Compile.akkaStream,
    Compile.playJson,
    Compile.slf4j,
    Test.akkaHttp,
    Test.logback,
    Test.scalaTest,
    Test.scalacheck,
    Test.testkit
  )

  val testkit = List(
    Compile.slf4j,
    "org.scalacheck" %% "scalacheck" % V.scalacheck withSources() withJavadoc()
  )

  val doc = List(
    Test.scalaTest,
    Test.logback
  )
}