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
    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 group: 'io.swagger', name: 'swagger-annotations', version: swaggerVersion
    implementation group: 'io.springfox', name: 'springfox-swagger2', version: springfoxVersion

    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}"

}

