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.palantir.git-version" version "0.12.2"
    id 'com.palantir.docker' version '0.22.2' apply false
    id "org.openapi.generator" version "4.2.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 = '4.3.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'
            openapitoolsVersion = '0.1.0'
            swaggerVersion = '1.6.0'
            springfoxVersion = '2.9.2'
            multiTenantLibVersion = '1.3.2'
        }
        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}"
        }
    }
}


