import java.text.SimpleDateFormat

plugins {
    id 'java'
    id 'org.springframework.boot'
    id 'io.spring.dependency-management'
    id 'org.jetbrains.kotlin.jvm'
    id 'org.jetbrains.kotlin.plugin.jpa' version '1.3.31'
    id 'org.jetbrains.kotlin.plugin.spring'
    id "com.palantir.git-version"
    id 'com.palantir.docker'
}

tasks.withType(JavaCompile) {
    options.encoding = "UTF-8"
}


payapiVersion = gitVersion()
def details = versionDetails()

group = rootProject.group
version = '1'
sourceCompatibility = jdkVersion
def payapiStartClass = 'com.supwisdom.dlpay.PayApiApplicationKt'

println("Build version: $payapiVersion")

bootJar {
    mainClassName = payapiStartClass
    manifest {
        attributes('Payapi-Version': payapiVersion,
                'Payapi-Buildtime': new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(new Date()))
    }
}

jar {
    baseName = 'payapi'
}

ext {
    set('springCloudVersion', "Greenwich.SR2")
}

docker {
    def imageVersion
    if (details.gitHashFull.startsWith(details.lastTag) || !details.isCleanTag) {
        imageVersion = 'dev'
    } else {
        imageVersion = details.lastTag
    }
    println("Docker image tag : " + imageVersion)
    name 'harbor.supwisdom.com/dali/payapi:' + imageVersion
    println(jar.archivePath)
    files jar.archivePath
}

docker.dependsOn(jar)

dependencies {
    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-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:2.1.5.RELEASE'
    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.kafka:spring-kafka'
    implementation 'org.springframework.social:spring-social-web:1.1.6.RELEASE'
    implementation 'org.springframework.kafka:spring-kafka:2.2.8.RELEASE'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    implementation 'commons-codec:commons-codec:1.12'
    implementation 'org.apache.commons:commons-lang3:3.9'
    implementation 'net.javacrumbs.shedlock:shedlock-spring:2.5.0'
    implementation 'net.javacrumbs.shedlock:shedlock-provider-redis-spring:2.5.0'

    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'

    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'
    runtime("org.springframework.boot:spring-boot-devtools")

    implementation 'org.postgresql:postgresql:42.2.5'
    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
    implementation 'com.jcabi:jcabi-manifests:1.1'
    implementation 'org.bitbucket.b_c:jose4j:0.6.5'
    implementation 'io.github.microutils:kotlin-logging:1.6.26'
    implementation 'org.slf4j:slf4j-parent:1.7.26'
    implementation 'com.github.penggle:kaptcha:2.3.2'
    implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
    implementation group: 'com.sun.jersey', name: 'jersey-client', version: '1.19'
    implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
    implementation group: 'taglibs', name: 'standard', version: '1.1.2'
    implementation group: 'commons-codec', name: 'commons-codec', version: '1.13'
    implementation files('libs/masmgc.sdk.sms-0.0.1-SNAPSHOT.jar')
//    implementation files('libs/ojdbc6.jar')
    implementation 'commons-dbcp:commons-dbcp:1.4'
    implementation 'commons-beanutils:commons-beanutils:1.9.3'

    implementation 'log4j:log4j:1.2.17'
    implementation 'com.alibaba:fastjson:1.2.60'

    implementation 'com.eatthepath:java-otp:0.1.0'
    implementation project(':payapi-common')
    /*支付宝SDK*/
    implementation group: 'com.alipay.sdk', name: 'alipay-sdk-java', version: '3.7.110.ALL'

    annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
    annotationProcessor 'org.projectlombok:lombok:1.18.8'
    compileOnly 'org.projectlombok:lombok:1.18.8'

//    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.rest-assured:rest-assured:3.3.0'
    testImplementation 'io.rest-assured:spring-mock-mvc:3.3.0'
    testImplementation 'org.hamcrest:hamcrest:2.1'
}

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

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

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