group = "dev.fyloz.trial.colorrecipesexplorer"
version = "1.3.1"
description = "Color Recipes Explorer"

plugins {
    id("java")
    id("org.jetbrains.kotlin.jvm") version "1.4.10"
    id("org.jetbrains.dokka") version "1.4.10"
    id("com.leobia.gradle.sassjavacompiler") version "0.2.1"
    id("io.freefair.lombok") version "5.2.1"
    id("org.springframework.boot") version "2.3.4.RELEASE"
    id("org.jetbrains.kotlin.plugin.spring") version "1.4.10"
    id("org.jetbrains.kotlin.plugin.jpa") version "1.4.10"
}

repositories {
    jcenter()
    mavenCentral()
}

dependencies {
    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.4.10"))
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.10")
    implementation("org.jetbrains.kotlin:kotlin-reflect:1.4.10")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.11.3")
    implementation("javax.xml.bind:jaxb-api:2.3.0")
    implementation("io.jsonwebtoken:jjwt:0.9.1")
    implementation("org.apache.poi:poi-ooxml:4.1.0")
    implementation("org.apache.pdfbox:pdfbox:2.0.4")
    implementation("com.atlassian.commonmark:commonmark:0.13.1")
    implementation("commons-io:commons-io:2.6")

    implementation("org.springframework.boot:spring-boot-starter-data-jpa:2.3.4.RELEASE")
    implementation("org.springframework.boot:spring-boot-starter-jdbc:2.3.4.RELEASE")
    implementation("org.springframework.boot:spring-boot-starter-thymeleaf:2.3.4.RELEASE")
    implementation("org.springframework.boot:spring-boot-starter-web:2.3.4.RELEASE")
    implementation("org.springframework.boot:spring-boot-starter-validation:2.3.4.RELEASE")
    implementation("org.springframework.boot:spring-boot-starter-security:2.3.4.RELEASE")
    implementation("org.springframework.boot:spring-boot-configuration-processor:2.3.4.RELEASE")
    implementation("org.springframework.boot:spring-boot-devtools:2.3.4.RELEASE")

    testImplementation("org.springframework:spring-test:5.1.6.RELEASE")
    testImplementation("org.mockito:mockito-core:3.6.0")
    testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
    testImplementation("org.junit.jupiter:junit-jupiter-api:5.3.2")
    testImplementation("org.springframework.boot:spring-boot-starter-test:2.3.4.RELEASE")
    testImplementation("org.springframework.boot:spring-boot-test-autoconfigure:2.3.4.RELEASE")
    testImplementation("org.jetbrains.kotlin:kotlin-test:1.4.10")
    testImplementation("org.jetbrains.kotlin:kotlin-test-junit:1.4.10")
//    testImplementation("io.mockk:mockk:1.10.2")

    runtimeOnly("com.h2database:h2:1.4.199")
    compileOnly("org.projectlombok:lombok:1.18.10")
}

java {
    sourceCompatibility = JavaVersion.VERSION_14
    targetCompatibility = JavaVersion.VERSION_14
}

sourceSets {
    main {
        java
        kotlin
    }
    test {
        kotlin
    }
}

tasks.register("buildFrontend") {
    exec {
        if (System.getProperty("os.name").toLowerCase().contains("windows")) {
            commandLine("cmd", "/c", "cd src/main/frontend && npm run-script build && xcopy dist\\color-recipes-explorer-frontend\\* ..\\resources\\angular\\static\\ /Y /E ")
        } else {
            commandLine("sh", "-c", "cd src/main/frontend && npm run-script build && cp -r dist/color-recipes-explorer-frontend/* ../resources/angular/static/")
        }
    }
}

tasks.register("buildAngular") {
    dependsOn("buildFrontend")
    dependsOn(tasks.build)
}

tasks.register("bootJarAngular") {
    dependsOn("buildFrontend")
    dependsOn(tasks.bootJar)
}

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

tasks.withType<JavaCompile> {
    options.compilerArgs.addAll(arrayOf("--release", "14"))
}

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions.jvmTarget = "14"
}

tasks.dokkaHtml {
    outputDirectory.set(rootDir.resolve("dokka"))
}
