/*
 * Copyright (C) 2017 47 Degrees
 *
 * 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.
 */

buildscript {
    ext {
        //Plugins
        gradleVersionsPluginVersion = "0.21.0"
        jmhVersion = "0.5.0"
        hoodVersion = "0.8.1"
        bintrayVersion = "1.8.4"
        gitPublishVersion = "2.1.1"

        // Libraries
        javaVersion = JavaVersion.VERSION_1_7
        kotlinTestVersion = "4.0.2758-SNAPSHOT"
        kotlinVersion = "1.3.31"
        arrowVersion = "0.10.3"
        kotlinMetadataVersion = "1.4.0"
        googleTestingVersion = "0.15"
        autoServiceVersion = "1.0-rc5"

        //Other json libraries
        kotlinxVersion = "0.10.0"
        klaxonVersion = "5.0.5"
        jsonparserVersion = "1.0.10"
        moshiVersion = "1.8.0"
        kotsonVersion ="2.5.0"
        jacksonVersion = "2.9.8"
        jsoniterVersion = "0.9.23"

        // Retrofit integration libraries
        retrofitVersion = "2.6.2"
        mockwebserverVersion = "3.14.2"
    }

    repositories {
        maven { url "https://jitpack.io" }
        maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
        maven { url "https://dl.bintray.com/jetbrains/markdown/" }
        maven { url "https://dl.bintray.com/arrow-kt/arrow-kt/" }
        maven { url "https://plugins.gradle.org/m2/" }
        jcenter()
    }

    dependencies {
        classpath "com.github.ben-manes:gradle-versions-plugin:$gradleVersionsPluginVersion"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlinVersion"
        classpath "io.arrow-kt:arrow-ank-gradle:$arrowVersion"
        classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:$bintrayVersion"
        classpath "org.ajoberstar:gradle-git-publish:$gitPublishVersion"
        classpath "me.champeau.gradle:jmh-gradle-plugin:$jmhVersion"
    }
}

apply plugin: "kotlin"
apply plugin: "com.github.ben-manes.versions"

apply from: "detekt.gradle"

def findPropertyOrEnv(String key) {
    [project.properties[key], System.getenv(key)].find { it != null }
}

configurations.all {
    resolutionStrategy {
        eachDependency { DependencyResolveDetails details ->
            if (details.requested.group == 'io.arrow-kt') {
                details.useVersion "0.10.2"
            }
        }
    }
    exclude group: "io.kotlintest", module: "kotlintest-assertions"
    exclude group: "io.kotlintest", module: "kotlintest-extensions"
    exclude group: "io.kotlintest", module: "kotlintest-runner-junit5"
    exclude group: "io.kotlintest", module: "kotlintest-runner-jvm"
}

subprojects { project ->

    repositories {
        jcenter()
        maven { url "https://kotlin.bintray.com/kotlinx" }
        maven { url "https://dl.bintray.com/kotlin/kotlin-dev" }
        maven { url "https://dl.bintray.com/arrow-kt/arrow-kt" }
        maven { url "https://dl.bintray.com/jetbrains/markdown/" }
        maven { url "https://jitpack.io" }
        maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
    }

    apply plugin: "kotlin"
    apply plugin: "jacoco"
    apply plugin: "com.jfrog.bintray"
    apply plugin: "maven-publish"
    apply from: rootProject.file("gradle/gradle-mvn-push.gradle")

    archivesBaseName = POM_ARTIFACT_ID

    jacoco {
        toolVersion "0.8.1"
    }

    task codeCoverageReport(type: JacocoReport) {
        reports {
            xml.enabled true
            xml.destination file("${buildDir}/reports/jacoco/report.xml")
            html.enabled true
            csv.enabled false
        }

        getClassDirectories().setFrom(fileTree(dir: "build/classes/main/helios"))

        getSourceDirectories().setFrom(files("src/main/kotlin"))

        executionData fileTree(project.rootDir.absolutePath).include("**/build/jacoco/*.exec")
    }

    bintray {
        publish = true
        user = findPropertyOrEnv("BINTRAY_USER") ?: "no.bintray.user"
        key = findPropertyOrEnv("BINTRAY_API_KEY") ?: "no.bintray.api.key"
        publications = ["HeliosPublication"]
        configurations = ["archives"]
        pkg {
            repo = "helios"
            name = project.name
            userOrg = POM_DEVELOPER_ID
            licenses = ["Apache-2.0"]
            vcsUrl = "https://github.com/47degrees/helios.git"
        }
    }

    compileKotlin.kotlinOptions.freeCompilerArgs += ["-Xskip-runtime-version-check"]

    test {
        useJUnitPlatform()
        testLogging {
            events "passed", "skipped", "failed", "standardOut", "standardError"
        }
    }

    build.dependsOn ":detekt"

    sourceCompatibility = javaVersion
    targetCompatibility = javaVersion
}
