/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements. See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership. The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied. See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

dependencies {
    modules {
        module("io.swagger.core.v3:swagger-annotations") {
            replacedBy("io.swagger.core.v3:swagger-annotations-jakarta")
        }
    }

    implementation(project(path: ':fineract-core'))
    implementation(project(path: ':fineract-accounting'))
    implementation(project(path: ':fineract-investor'))
    implementation(project(path: ':fineract-loan'))
    implementation(project(path: ':fineract-savings'))
    implementation(project(path: ':fineract-branch'))
    implementation(project(path: ':fineract-document'))
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")

    // Never use "compile" scope, but make all dependencies either 'implementation', 'runtimeOnly' or 'testCompile'.
    // Note that we never use 'api', because Fineract at least currently is a simple monolithic application ("WAR"), not a library.
    // We also (normally should have) no need to ever use 'compileOnly'.

    // implementation dependencies are directly used (compiled against) in src/main (and src/test)
    //
    implementation(
            project(path: ':fineract-avro-schemas')
            )
    implementation(
            'org.springframework.boot:spring-boot-starter-web',
            'org.springframework.boot:spring-boot-starter-security',
            'org.springframework.boot:spring-boot-starter-cache',
            'org.springframework.boot:spring-boot-starter-oauth2-resource-server',
            'org.springframework.boot:spring-boot-starter-actuator',
            'org.springframework.boot:spring-boot-starter-batch',
            'org.springframework.batch:spring-batch-integration',
            'org.springframework.boot:spring-boot-starter-integration',
            'org.springframework.integration:spring-integration-event',
            'org.springframework.integration:spring-integration-jms',
            'org.springframework.integration:spring-integration-kafka',
            'org.springframework.kafka:spring-kafka',

            'io.micrometer:micrometer-registry-prometheus',
            'io.micrometer:micrometer-registry-otlp',
            'io.micrometer:micrometer-registry-cloudwatch2',

            'io.awspring.cloud:spring-cloud-aws-starter',

            'org.apache.avro:avro',
            'jakarta.ws.rs:jakarta.ws.rs-api',
            'org.glassfish.jersey.media:jersey-media-multipart',

            'org.springframework:spring-jms',
            'org.springframework:spring-context-support',

            'com.google.guava:guava',
            'com.google.code.gson:gson',

            'jakarta.jms:jakarta.jms-api',
            'jakarta.management.j2ee:jakarta.management.j2ee-api',

            'com.squareup.retrofit2:retrofit',
            'com.squareup.okhttp3:okhttp',
            'com.squareup.okhttp3:okhttp-urlconnection',

            'org.apache.commons:commons-lang3',
            'commons-io:commons-io',
            'org.apache.poi:poi',
            'org.apache.poi:poi-ooxml',
            'org.apache.tika:tika-core',
            'org.apache.tika:tika-parser-microsoft-module',
            'org.apache.tika:tika-parser-miscoffice-module',

            'org.liquibase:liquibase-core',

            'com.github.librepdf:openpdf',
            'com.github.spullara.mustache.java:compiler',
            'com.jayway.jsonpath:json-path',

            'javax.cache:cache-api',

            'com.github.spotbugs:spotbugs-annotations',
            'io.swagger.core.v3:swagger-annotations-jakarta',

            'com.google.cloud.sql:mysql-socket-factory-connector-j-8',
            'com.squareup.retrofit2:converter-gson',
            'com.sun.activation:jakarta.activation',
            'com.sun.mail:jakarta.mail',

            'org.springdoc:springdoc-openapi-starter-webmvc-ui',
            'org.mapstruct:mapstruct',

            'io.github.resilience4j:resilience4j-spring-boot3',
            )

    implementation ('software.amazon.msk:aws-msk-iam-auth:2.0.3') {
        exclude group: 'commons-logging'
    }

    implementation 'io.swagger.core.v3:swagger-jaxrs2-jakarta:2.2.19'

    implementation ('org.apache.commons:commons-email') {
        exclude group: 'com.sun.mail', module: 'javax.mail'
        exclude group: 'javax.activation', module: 'activation'
    }

    implementation('org.springframework.boot:spring-boot-starter-jersey') {
        exclude group: 'org.glassfish.hk2.external', module: 'aopalliance-repackaged'
        exclude group: 'org.glassfish.hk2', module: 'hk2-runlevel'
        exclude group: 'org.hibernate.validator', module: 'hibernate-validator'
        exclude group: 'jakarta.activation', module: 'jakarta.activation-api'
    }
    implementation('org.dom4j:dom4j') {
        exclude group: 'javax.xml.bind'
    }
    implementation ('jakarta.xml.bind:jakarta.xml.bind-api') {
        exclude group: 'jakarta.activation'
    }
    implementation ('org.apache.activemq:activemq-client-jakarta') {
        exclude group: 'org.apache.geronimo.specs'
        exclude group: 'javax.annotation', module: 'javax.annotation-api'
    }
    implementation ('org.springframework.boot:spring-boot-starter-data-jpa') {
        exclude group: 'org.hibernate'
    }
    implementation('org.eclipse.persistence:org.eclipse.persistence.jpa') {
        exclude group: 'org.eclipse.persistence', module: 'jakarta.persistence'
    }
    implementation ('org.quartz-scheduler:quartz') {
        exclude group: 'com.zaxxer', module: 'HikariCP-java7'
    }
    implementation('org.apache.commons:commons-csv'){}
    implementation ('software.amazon.awssdk:s3') {
    }
    implementation ('software.amazon.awssdk:auth') {
    }

    implementation ('org.mnode.ical4j:ical4j') {
        exclude group: 'commons-logging'
        exclude group: 'javax.activation'
        exclude group: 'com.sun.mail', module: 'javax.mail'
    }

    implementation ('org.ehcache:ehcache') {
        exclude group: 'com.sun.activation'
    }

    implementation('org.owasp.esapi:esapi') {
        exclude group: 'org.slf4j'
        exclude group: 'log4j'
        exclude group: 'commons-logging'
        exclude group: 'commons-collections'
        exclude group: 'commons-lang'
        exclude group: 'spotbugs-annotations'
        exclude group: 'xml-apis'
    }

    runtimeOnly('org.glassfish.jaxb:jaxb-runtime') {
        exclude group: 'com.sun.activation'
    }

    // runtimeOnly dependencies are things that Fineract code has no direct compile time dependency on, but which must be present at run-time
    runtimeOnly(
            'org.apache.bval:org.apache.bval.bundle',

            // Although fineract (at the time of writing) doesn't have any compile time dep. on httpclient,
            // it's useful to have this for the Spring Boot TestRestTemplate http://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#boot-features-rest-templates-test-utility
            'org.apache.httpcomponents:httpclient'
            )

    compileOnly 'org.projectlombok:lombok'
    annotationProcessor 'org.projectlombok:lombok'
    annotationProcessor 'org.mapstruct:mapstruct-processor'

    implementation 'ch.qos.logback.contrib:logback-json-classic'
    implementation 'ch.qos.logback.contrib:logback-jackson'
    implementation 'org.codehaus.janino:janino'

    implementation 'org.apache.commons:commons-math3'

    implementation 'io.github.classgraph:classgraph'

    // testCompile dependencies are ONLY used in src/test, not src/main.
    // Do NOT repeat dependencies which are ALREADY in implementation or runtimeOnly!
    //
    testImplementation( 'io.cucumber:cucumber-spring',
            'io.github.classgraph:classgraph',
            'io.cucumber:cucumber-core',
            'io.cucumber:cucumber-java',
            'io.cucumber:cucumber-java8',
            'io.cucumber:cucumber-junit-platform-engine',
            )
    testImplementation ('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'com.jayway.jsonpath', module: 'json-path'
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
        exclude group: 'jakarta.activation'
        exclude group: 'javax.activation'
        exclude group: 'org.skyscreamer'
    }
    testImplementation ('org.mockito:mockito-inline')
}
