plugins {
    id 'java'
    id 'org.springframework.boot' version '3.3.1'
    id 'io.spring.dependency-management' version '1.1.5'
    id "org.asciidoctor.jvm.convert" version "3.3.2"
}

group = 'com.dnd'
version = '0.0.1-SNAPSHOT'

java {
    toolchain {
        languageVersion = JavaLanguageVersion.of(17)
    }
}

configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    asciidoctorExtensions
}

repositories {
    mavenCentral()
    maven { url 'https://jitpack.io' }
}

ext {
    set('snippetsDir', file('build/generated-snippets'))
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    testImplementation 'org.springframework.security:spring-security-test'
    compileOnly 'org.projectlombok:lombok'
    testImplementation 'com.h2database:h2'
    runtimeOnly 'com.mysql:mysql-connector-j'
    annotationProcessor 'org.projectlombok:lombok'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

    // QueryDSL
    implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
    annotationProcessor "com.querydsl:querydsl-apt:5.0.0:jakarta"
    annotationProcessor "jakarta.annotation:jakarta.annotation-api"
    annotationProcessor "jakarta.persistence:jakarta.persistence-api"

    // oauth2 dependency
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

    // JWT dependencies
    implementation 'io.jsonwebtoken:jjwt-api:0.11.5'
    runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5'
    runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5'

    // Spring REST Docs
    asciidoctorExtensions 'org.springframework.restdocs:spring-restdocs-asciidoctor'
    testImplementation 'org.springframework.restdocs:spring-restdocs-mockmvc'

    // test lombok
    testCompileOnly 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'

    // logback appender discord
    implementation 'com.github.napstr:logback-discord-appender:1.0.0'

    // redis
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation 'org.redisson:redisson-spring-boot-starter:3.16.3'
}

tasks.named('test') {
    useJUnitPlatform()
}

test {
    outputs.dir snippetsDir

    useJUnitPlatform()
}

asciidoctor {
    configurations 'asciidoctorExtensions'

    sources {
        include("**/index.adoc", "**/*.adoc")
    }

    baseDirFollowsSourceFile()

    inputs.dir snippetsDir

    dependsOn test
}

asciidoctor.doFirst {
    delete file('src/main/resources/static/docs')
}

task createDocument(type: Copy) {
    dependsOn asciidoctor

    from file("build/docs/asciidoc")
    into file("src/main/resources/static")
}

build {
    dependsOn createDocument
}

jar {
    enabled = false
}