plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.5'
    id 'io.spring.dependency-management' version '1.1.4'
}

group = 'com.zioinfo.kintex'
version = '0.1.0-SNAPSHOT'

java {
    sourceCompatibility = JavaLanguageVersion.of(17)
    targetCompatibility = JavaLanguageVersion.of(17)
}

// 한글 문자열 리터럴 손상 방지 — Windows javac 기본 인코딩(CP949) 대신 UTF-8 강제.
tasks.withType(JavaCompile).configureEach {
    options.encoding = 'UTF-8'
}

repositories {
    mavenCentral()
}

ext {
    mybatisStarterVersion = '3.0.3'   // Spring Boot 3.2.x 호환
    jjwtVersion = '0.12.5'
}

dependencies {
    // --- Web / REST + WebSocket(STOMP) 실시간 알림(RenderJob 완료·승인 이벤트) ---
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-websocket'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-security'

    // --- MyBatis + PostgreSQL(PostGIS) — 공간 SQL은 매퍼 XML(kintex-db-engineer 공유) ---
    implementation "org.mybatis.spring.boot:mybatis-spring-boot-starter:${mybatisStarterVersion}"
    runtimeOnly 'org.postgresql:postgresql'

    // --- Flyway 마이그레이션(순번 DDL·시드 권위) — Spring Boot 3.2.x 관리 버전(Flyway 9.x, PG 내장) ---
    implementation 'org.flywaydb:flyway-core'

    // --- Redis 작업 큐 (RenderJob·서류 생성·알림 발행) ---
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'

    // --- 메일 발송(자체 Postfix SMTP — 옥션 개설 통지·EDM·비밀번호 재설정) ---
    implementation 'org.springframework.boot:spring-boot-starter-mail'

    // --- 서류 PDF 생성(M6 G-05) — HTML→PDF 경량 렌더러. NanumGothic 폰트 임베드(한글 보존). ---
    implementation 'com.openhtmltopdf:openhtmltopdf-pdfbox:1.0.10'

    // --- 범용 그리드 PDF 출력(전 그리드 공용, JasperReports) — WISE/UIWS 패턴 이식. ---
    //     6.21.x는 PDF(iText) 익스포터가 코어에 포함. 한글은 fonts.xml 폰트확장으로 Identity-H 임베딩.
    implementation('net.sf.jasperreports:jasperreports:6.21.3') {
        // Spring Boot 관리 버전과 충돌 방지 — commons-logging 전이 의존성 정리.
        exclude group: 'commons-logging', module: 'commons-logging'
    }

    // --- JWT (행사 단위 RBAC 인증) ---
    implementation "io.jsonwebtoken:jjwt-api:${jjwtVersion}"
    runtimeOnly "io.jsonwebtoken:jjwt-impl:${jjwtVersion}"
    runtimeOnly "io.jsonwebtoken:jjwt-jackson:${jjwtVersion}"

    // --- 2차 인증 TOTP(RFC6238) — WISE/UIWS 이식 (dev.samstevens.totp) ---
    implementation 'dev.samstevens.totp:totp:1.7.1'

    // --- AOP (@Audited 감사 어드바이스, Phase B B-2/B-4) ---
    implementation 'org.springframework.boot:spring-boot-starter-aop'

    // --- Lombok ---
    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'

    // --- Test ---
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
}

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