plugins {
  id 'java'
  id 'org.springframework.boot' version '3.5.7'
  id 'io.spring.dependency-management' version '1.1.7'
  id 'com.diffplug.spotless' version '6.25.0'
}

group = 'com.kamco.cd'
version = '0.0.1-SNAPSHOT'
description = 'kamco-back'

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

configurations {
  compileOnly {
    extendsFrom annotationProcessor
  }
}

repositories {
  mavenCentral()
  maven { url "https://repo.osgeo.org/repository/release/" }
}

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
  implementation 'org.springframework.boot:spring-boot-starter-web'
  compileOnly 'org.projectlombok:lombok'
  runtimeOnly 'org.postgresql:postgresql'
  annotationProcessor 'org.projectlombok:lombok'
  testImplementation 'org.springframework.boot:spring-boot-starter-test'
  testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
  implementation 'org.springframework.boot:spring-boot-starter-validation'

  //geometry
  implementation 'com.fasterxml.jackson.core:jackson-databind'
  implementation "org.geotools:gt-shapefile:30.0"
  implementation "org.geotools:gt-referencing:30.0"
  implementation "org.geotools:gt-geojson:30.0"
  implementation 'org.locationtech.jts.io:jts-io-common:1.20.0'
  implementation 'org.locationtech.jts:jts-core:1.19.0'
  implementation 'org.hibernate:hibernate-spatial:6.2.7.Final'
  implementation 'org.geotools:gt-main:30.0'
  implementation("org.geotools:gt-geotiff:30.0") {
    exclude group: "javax.media", module: "jai_core"
  }
  implementation 'org.geotools:gt-epsg-hsql:30.0'

  //  QueryDSL JPA
  implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'

  //  Q클래스 생성용 annotationProcessor
  annotationProcessor 'com.querydsl:querydsl-apt:5.0.0:jakarta'
  annotationProcessor 'jakarta.annotation:jakarta.annotation-api'
  annotationProcessor 'jakarta.persistence:jakarta.persistence-api'

  // actuator
  implementation 'org.springframework.boot:spring-boot-starter-actuator'

  // Redis
  implementation 'org.springframework.boot:spring-boot-starter-data-redis'

  // SpringDoc OpenAPI (Swagger)
  implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'

  // Apache Commons Compress for archive handling
  implementation 'org.apache.commons:commons-compress:1.26.0'

  // crypto
  implementation 'org.mindrot:jbcrypt:0.4'

  // security
  implementation 'org.springframework.boot:spring-boot-starter-security'
  implementation 'org.springframework.boot:spring-boot-starter-web'

  // JWT (jjwt 0.12.x)
  implementation 'io.jsonwebtoken:jjwt-api:0.12.5'
  runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.12.5'
  runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.12.5' // JSON (Jackson)

  implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310'
  implementation 'org.reflections:reflections:0.10.2'
}

configurations.configureEach {
  exclude group: 'javax.media', module: 'jai_core'
}

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


bootJar {
  archiveFileName = 'ROOT.jar'
}

// Spotless configuration for code formatting (2-space indent)
spotless {
  java {
    target 'src/**/*.java'
    googleJavaFormat('1.19.2')  // Default Google Style = 2 spaces (NO .aosp()!)
    trimTrailingWhitespace()
    endWithNewline()
  }
}

// Run spotlessCheck before build
tasks.named('build') {
  dependsOn 'spotlessCheck'
}
