plugins {
    id "java"
    id "org.springframework.boot"
    id "org.jetbrains.kotlin.jvm"
    id "org.jetbrains.kotlin.plugin.jpa"
    id "org.jetbrains.kotlin.plugin.spring"
    id "com.palantir.docker"
}

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

def payapiStartClass = "com.supwisdom.dlpay.PayApiApplicationKt"

println("Build version: $buildVersion")


bootJar {
    enabled = true
    mainClassName = payapiStartClass
//    def standalone = ""
//    if (rootProject.hasProperty("no-multi-tenant")) {
//        standalone = "-stangalone-"
//
    archiveFileName = "${project.name}-${buildVersion}.${archiveExtension.getOrElse('.jar')}"
    manifest {
        attributes("Payapi-Version": buildVersion,
                "Payapi-Buildtime": buildTime)
    }
}

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

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

docker {
    def imageVersion
    if (details.gitHashFull.startsWith(details.lastTag) || !details.isCleanTag) {
        imageVersion = "dev"
    } else {
        imageVersion = details.lastTag
    }
    println("Docker image tag : ${imageVersion}")
    name "${dockerRegistry}/payapi:${imageVersion}"
    println(bootJar.archiveFile.get())
    files bootJar.archiveFile.get()
    buildArgs([BUILD_VERSION: "${buildVersion}"])
}

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
}

repositories {
    maven {
        url "http://ykt-nx.supwisdom.com/repository/ecard-repo/"
        credentials {
            username "${nxUser}"
            password "${nxPassword}"
        }
    }
}

dependencies {
    implementation project(":payapi-common")

    implementation "org.springframework.boot:spring-boot-starter-web"
    implementation "org.springframework.boot:spring-boot-starter-security"
    implementation "org.springframework.boot:spring-boot-starter-cache"
    implementation "org.springframework.boot:spring-boot-autoconfigure"
    implementation "org.springframework.security:spring-security-oauth2-jose"
    implementation "org.springframework.security:spring-security-oauth2-client"
    implementation "org.springframework.security:spring-security-oauth2-jose"
    implementation "org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure"
    implementation "org.springframework.boot:spring-boot-starter-thymeleaf"
    implementation "org.springframework.session:spring-session-data-redis"
    implementation "org.springframework.boot:spring-boot-starter-cache"
    implementation "org.springframework.social:spring-social-web:${springSocialVersion}"
    implementation "org.apache.kafka:kafka-streams"
    implementation "org.springframework.kafka:spring-kafka"

    implementation "org.springframework.cloud:spring-cloud-starter"
    implementation "org.springframework.cloud:spring-cloud-starter-consul-discovery"
    implementation "org.springframework.cloud:spring-cloud-starter-netflix-hystrix"
    implementation "org.springframework.cloud:spring-cloud-starter-netflix-hystrix-dashboard"

    developmentOnly("org.springframework.boot:spring-boot-devtools")

    implementation "org.thymeleaf.extras:thymeleaf-extras-springsecurity5"

    implementation "org.apache.commons:commons-lang3:${lang3Version}"
    implementation "net.javacrumbs.shedlock:shedlock-spring:${shedlockVersion}"
    implementation "net.javacrumbs.shedlock:shedlock-provider-redis-spring:${shedlockVersion}"

    implementation "com.supwisdom:multi-tenant-core:${multiTenantLibVersion}"
    implementation "com.supwisdom:multi-tenant-datasource:${multiTenantLibVersion}"
    implementation "com.supwisdom:multi-tenant-jwt:${multiTenantLibVersion}"
    implementation "com.supwisdom:multi-tenant-task:${multiTenantLibVersion}"

    implementation "org.bitbucket.b_c:jose4j:${jose4jVersion}"
    implementation files("libs/masmgc.sdk.sms-0.0.1-SNAPSHOT.jar")
    implementation "commons-beanutils:commons-beanutils:${beanutilsVersion}"
    /*支付宝SDK*/
    implementation "com.alipay.sdk:alipay-sdk-java:${alipaySDKVersion}"

    implementation "com.github.penggle:kaptcha:${kaptchaVersion}"
    implementation "com.sun.jersey:jersey-client:${jerseyClientVersion}"

}

