/**
 * 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.
 */

plugins {
	id 'java-library'
	id 'java-library-distribution'
    id 'org.springframework.boot' version '2.6.6'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
}

repositories {
    flatDir {
        dirs "$rootDir/scorecard-client/build/libs"
    }
    mavenCentral()
}

dependencies {
    compileOnly(
        // Fineract!
        files("../../fineract/fineract-provider/build/classes/java/main/"),

        // Fineract dependencies (TODO version should *NOT* be specified here...)
        'org.slf4j:slf4j-api:1.7.36',
        'javax.ws.rs:jsr311-api:1.1.1',
        'org.apache.commons:commons-lang3:3.10',
        'org.springframework:spring-context',
        'org.springframework.data:spring-data-commons',
        'org.springframework.security:spring-security-core',
        'org.springframework.boot:spring-boot-starter-data-jpa',
        'org.eclipse.persistence:org.eclipse.persistence.jpa:2.7.10'
    )

    implementation(
        // Fineract Credit Scorecard Dependencies
        project(":scorecard-client"),
        'com.google.code.gson:gson:2.8.7'
    )

    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
}

tasks.named('test') {
    // Use JUnit Platform for unit tests.
    useJUnitPlatform()
}

distributions {
    main {
        contents {
        	into('/') {
            	from "README.md", "../LICENSE", "run", "run.bat"
            }
            
            into('/lib') {
                from(jar)
            }

            eachFile { FileCopyDetails fcp ->
              fcp.relativePath = new RelativePath(true, fcp.relativePath.pathString.replace('scorecard-plugin/', ''))
            }
        }
    }
}
