extra["versions.intellijSdk"] = "182.4129.33"
extra["versions.androidBuildTools"] = "r23.0.1"
extra["versions.idea.NodeJS"] = "181.3494.12"
extra["versions.androidStudioRelease"] = "3.3.0.9"
extra["versions.androidStudioBuild"] = "182.4996246"

val gradleJars = listOf(
    "gradle-api",
    "gradle-tooling-api",
    "gradle-base-services",
    "gradle-wrapper",
    "gradle-core",
    "gradle-base-services-groovy"
)

val androidStudioVersion = if (extra.has("versions.androidStudioRelease"))
    extra["versions.androidStudioRelease"]?.toString()?.replace(".", "")?.substring(0, 2)
else
    null

val intellijVersion = rootProject.extra["versions.intellijSdk"] as String
val intellijVersionDelimiterIndex = intellijVersion.indexOfAny(charArrayOf('.', '-'))
if (intellijVersionDelimiterIndex == -1) {
    error("Invalid IDEA version $intellijVersion")
}

val platformBaseVersion = intellijVersion.substring(0, intellijVersionDelimiterIndex)
val platform = androidStudioVersion?.let { "AS$it" } ?: platformBaseVersion

when (platform) {
    "183" -> {
        extra["versions.jar.guava"] = "25.1-jre"
        extra["versions.jar.groovy-all"] = "2.4.15"
        extra["versions.jar.lombok-ast"] = "0.2.3"
        extra["versions.jar.swingx-core"] = "1.6.2-2"
        extra["versions.jar.kxml2"] = "2.3.0"
        extra["versions.jar.streamex"] = "0.6.7"
        extra["versions.jar.gson"] = "2.8.4"
        extra["versions.jar.oro"] = "2.0.8"
        extra["versions.jar.picocontainer"] = "1.2"
        for (jar in gradleJars) {
            extra["versions.jar.$jar"] = "4.5.1"
        }

        extra["ignore.jar.snappy-in-java"] = true
    }
    "182" -> {
        extra["versions.jar.guava"] = "23.6-jre"
        extra["versions.jar.groovy-all"] = "2.4.15"
        extra["versions.jar.lombok-ast"] = "0.2.3"
        extra["versions.jar.swingx-core"] = "1.6.2-2"
        extra["versions.jar.kxml2"] = "2.3.0"
        extra["versions.jar.streamex"] = "0.6.5"
        extra["versions.jar.gson"] = "2.8.4"
        extra["versions.jar.oro"] = "2.0.8"
        extra["versions.jar.picocontainer"] = "1.2"
        for (jar in gradleJars) {
            extra["versions.jar.$jar"] = "4.5.1"
        }

        extra["ignore.jar.snappy-in-java"] = true
    }
    "181" -> {
        extra["versions.jar.guava"] = "21.0"
        extra["versions.jar.groovy-all"] = "2.4.12"
        extra["versions.jar.lombok-ast"] = "0.2.3"
        extra["versions.jar.swingx-core"] = "1.6.2-2"
        extra["versions.jar.kxml2"] = "2.3.0"
        extra["versions.jar.streamex"] = "0.6.5"
        extra["versions.jar.gson"] = "2.8.2"
        extra["versions.jar.oro"] = "2.0.8"
        extra["versions.jar.snappy-in-java"] = "0.5.1"
        for (jar in gradleJars) {
            extra["versions.jar.$jar"] = "4.4"
        }
    }
    "173" -> {
        extra["versions.jar.guava"] = "21.0"
        extra["versions.jar.groovy-all"] = "2.4.12"
        extra["versions.jar.lombok-ast"] = "0.2.3"
        extra["versions.jar.swingx-core"] = "1.6.2"
        extra["versions.jar.kxml2"] = "2.3.0"
        extra["versions.jar.streamex"] = "0.6.5"
        extra["versions.jar.gson"] = "2.8.2"
        extra["versions.jar.snappy-in-java"] = "0.5.1"
        for (jar in gradleJars) {
            extra["versions.jar.$jar"] = "4.0"
        }
        extra["ignore.jar.lombok-ast-0.2.3"] = true
    }
    "172" -> {
        extra["versions.jar.guava"] = "21.0"
        extra["versions.jar.groovy-all"] = "2.4.6"
        extra["versions.jar.lombok-ast"] = "0.2.3"
        extra["versions.jar.swingx-core"] = "1.6.2"
        extra["versions.jar.kxml2"] = "2.3.0"
        extra["versions.jar.streamex"] = "0.6.2"
        extra["versions.jar.gson"] = "2.5"
        extra["versions.jar.snappy-in-java"] = "0.5.1"
        for (jar in gradleJars) {
            extra["versions.jar.$jar"] = "3.5"
        }
    }
    "AS31" -> {
        extra["versions.jar.guava"] = "21.0"
        extra["versions.jar.groovy-all"] = "2.4.12"
        extra["versions.jar.swingx-core"] = "1.6.2"
        extra["versions.jar.kxml2"] = "2.3.0"
        extra["versions.jar.streamex"] = "0.6.5"
        extra["versions.jar.gson"] = "2.8.2"
        extra["versions.jar.snappy-in-java"] = "0.5.1"
        for (jar in gradleJars) {
            extra["versions.jar.$jar"] = "4.0"
        }

        extra["ignore.jar.common"] = true
        extra["ignore.jar.lombok-ast"] = true
    }
    "AS32" -> {
        extra["versions.jar.guava"] = "21.0"
        extra["versions.jar.groovy-all"] = "2.4.12"
        extra["versions.jar.swingx-core"] = "1.6.2"
        extra["versions.jar.kxml2"] = "2.3.0"
        extra["versions.jar.streamex"] = "0.6.5"
        extra["versions.jar.gson"] = "2.8.2"
        extra["versions.jar.oro"] = "2.0.8"
        extra["versions.jar.snappy-in-java"] = "0.5.1"
        for (jar in gradleJars) {
            extra["versions.jar.$jar"] = "4.4"
        }

        extra["ignore.jar.common"] = true
        extra["ignore.jar.lombok-ast"] = true
    }
    "AS33" -> {
        extra["versions.jar.guava"] = "23.6-jre"
        extra["versions.jar.groovy-all"] = "2.4.15"
        extra["versions.jar.lombok-ast"] = "0.2.3"
        extra["versions.jar.swingx-core"] = "1.6.2-2"
        extra["versions.jar.kxml2"] = "2.3.0"
        extra["versions.jar.streamex"] = "0.6.5"
        extra["versions.jar.gson"] = "2.8.4"
        extra["versions.jar.oro"] = "2.0.8"
        extra["versions.jar.picocontainer"] = "1.2"
        for (jar in gradleJars) {
            extra["versions.jar.$jar"] = "4.4"
        }

        extra["ignore.jar.snappy-in-java"] = true
        extra["ignore.jar.common"] = true
        extra["ignore.jar.lombok-ast"] = true
    }
}

if (!extra.has("versions.androidStudioRelease")) {
    extra["ignore.jar.android-base-common"] = true
}
