import java.text.SimpleDateFormat

plugins {
    id 'java'
    id 'org.springframework.boot' version '2.2.2.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
    id 'org.jetbrains.kotlin.jvm' version '1.3.31'
    id 'org.jetbrains.kotlin.plugin.spring' version '1.3.31' apply false
    id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.31' apply false
    id 'com.gradle.build-scan' version '2.0.2'
    id "com.palantir.git-version" version "0.12.2"
    id 'com.palantir.docker' version '0.22.2' apply false
}

bootJar {
    enabled = false
}

allprojects {
    repositories {
        jcenter()
        mavenCentral()
    }
    ext {
        set('junit_jupiter_version', "5.5.2")
        set("junit_platform_version", "1.5.2")
        set("mockitoVersion", "3.1.0")
        set("dockerRegistry", "harbor.supwisdom.com/dali")
        set("buildTime", new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(new Date()))
    }

    apply plugin: 'java'
    apply plugin: 'io.spring.dependency-management'

    group = 'com.supwisdom'

    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8

    compileKotlin {
        kotlinOptions {
            freeCompilerArgs = ['-Xjsr305=strict']
            jvmTarget = jdkVersion
        }
    }

    compileTestKotlin {
        kotlinOptions {
            freeCompilerArgs = ['-Xjsr305=strict']
            jvmTarget = jdkVersion
        }
    }

    sourceSets {
        main.java.srcDirs += "src/main/java"
    }

    version = '1'
    ext {
        details = versionDetails()
        buildVersion = gitVersion()
    }
}


subprojects {

    ext {
        set('springCloudVersion', "Hoxton.RELEASE")
    }

    dependencies {
        ext {
            slf4jVersion = '1.7.26'
            beanutilsVersion = '1.9.3'
            codecVersion = '1.13'
            lang3Version = '3.9'
            commonCodecVersion = '1.12'
            lombokVersion = '1.18.8'
            javaELVersion = '3.0.0'
            shedlockVersion = '2.5.0'
            jose4jVersion = '0.6.5'
            jcabiManifestsVersion = '1.1'
            kotlnLogVersion = '1.6.26'
            slf4jVersion = '1.7.26'
            gsonVersion = '2.8.5'
            dbcpVersion = '1.4'
            log4jVersion = '1.2.17'
            alibabFastjsonVerison = '1.2.60'
            beanutilsVersion = '1.9.3'
            alipaySDKVersion = '3.7.110.ALL'
            lombokVersion = '1.18.8'
            resetAssuredVersion = '3.3.0'
            hamcrestVersion = '2.1'
            mockkVersion = '1.9.3'
            commonNetVersion = '3.6'
            kaptchaVersion = '2.3.2'
            jerseyClientVersion = '1.19'
            javaxWSRSVersion = '2.1.1'
            dom4jVersion = '2.1.1'
            javaxServletVersion = '4.0.1'
            springSocialVersion = '1.1.6.RELEASE'
            springKafkaVersion = '2.2.8.RELEASE'
            postgresVersion = '42.2.5'
            multiTenantLibVersion = '1.2.5'
        }
        implementation "org.jetbrains.kotlin:kotlin-reflect"
        implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"

        implementation "org.springframework.boot:spring-boot-starter"
        implementation "org.springframework.boot:spring-boot-starter-data-jpa"
        implementation "org.springframework.boot:spring-boot-starter-data-redis"
        implementation "org.springframework.boot:spring-boot-starter-validation"

        implementation "javax.validation:validation-api"
        implementation "com.jcabi:jcabi-manifests:${jcabiManifestsVersion}"
        implementation "org.slf4j:slf4j-parent:${slf4jVersion}"
        implementation "org.slf4j:slf4j-api:${slf4jVersion}"
        implementation "org.postgresql:postgresql:${postgresVersion}"
        implementation "io.github.microutils:kotlin-logging:${kotlnLogVersion}"
        implementation "org.slf4j:slf4j-parent:${slf4jVersion}"
        implementation "com.google.code.gson:gson:${gsonVersion}"
        implementation "commons-dbcp:commons-dbcp:${dbcpVersion}"
        implementation "commons-codec:commons-codec:${commonCodecVersion}"
        implementation "log4j:log4j:${log4jVersion}"
        implementation "com.alibaba:fastjson:${alibabFastjsonVerison}"
        implementation "com.fasterxml.jackson.module:jackson-module-kotlin"


        annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
        annotationProcessor "org.projectlombok:lombok:${lombokVersion}"
        compileOnly "org.projectlombok:lombok:${lombokVersion}"


        testImplementation("org.springframework.boot:spring-boot-starter-test") {
            exclude group: "junit", module: "junit"
        }
        testImplementation "org.junit.jupiter:junit-jupiter-api:${junit_jupiter_version}"
        testRuntimeOnly "org.junit.jupiter:junit-jupiter-engine:${junit_jupiter_version}"
        testRuntimeOnly "org.junit.platform:junit-platform-launcher:${junit_platform_version}"
        testRuntimeOnly("org.junit.vintage:junit-vintage-engine:${junit_jupiter_version}")
        testImplementation "io.mockk:mockk:${mockkVersion}"
        testImplementation "org.hamcrest:hamcrest:${hamcrestVersion}"
        testImplementation "io.rest-assured:rest-assured:${resetAssuredVersion}"
        testImplementation "io.rest-assured:spring-mock-mvc:${resetAssuredVersion}"
    }

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

    dependencyManagement {
        imports {
            mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
        }
    }
}


