/**
 * 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.
 */
description = 'Fineract Client'

apply plugin: 'org.openapi.generator'

apply from: 'dependencies.gradle'

// enable when all tests are migrated
tasks.cucumber.onlyIf {false}

// TODO: @vidakovic we should publish this lib to Maven Central; do in separate PR

openApiMeta {
    generatorName = 'Fineract'
    packageName = 'org.apache.fineract.client'
    outputFolder = "$buildDir/meta".toString()
    // trick to make sure fineract.yaml is generated first
}

openApiValidate {
    inputSpec = "file:///$swaggerFile"
    recommend = true
}

task buildJavaSdk(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask) {
    generatorName = 'java'
    verbose = false
    validateSpec = false
    skipValidateSpec = true
    inputSpec = "file:///$swaggerFile"
    outputDir = "$buildDir/generated/java".toString()
    templateDir = "$rootDir/fineract-client/src/main/resources/java/template/"
    groupId = 'org.apache.fineract'
    apiPackage = 'org.apache.fineract.client.services'
    invokerPackage = 'org.apache.fineract.client'
    modelPackage = 'org.apache.fineract.client.models'
    configOptions = [
        dateLibrary: 'java8',
        useRxJava2: 'false',
        library: 'retrofit2',
        hideGenerationTimestamp: 'true',
    ]
    generateModelTests = false
    generateApiTests = false
    ignoreFileOverride = "$projectDir/.openapi-generator-ignore"
    dependsOn(':fineract-provider:resolve')
}

task buildTypescriptAngularSdk(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask){
    generatorName = 'typescript-angular'
    verbose = false
    validateSpec = false
    skipValidateSpec = true
    inputSpec = "file:///$swaggerFile"
    outputDir = "$buildDir/generated/typescript".toString()
    apiPackage = 'apache-fineract-client/services'
    invokerPackage = 'apache-fineract-client/invoker'
    modelPackage = 'apache-fineract-client/models'
    configOptions = [
        apiModulePrefix: 'apacheFineractClient',
        configurationPrefix: 'apacheFineractClient',
        ngVersion: '12.0.0',
        npmName: '@apache/fineract-client',
        npmRepository: "${npmRepository}"
    ]
    dependsOn(':fineract-provider:resolve')
}

task buildAsciidoc(type: org.openapitools.generator.gradle.plugin.tasks.GenerateTask){
    generatorName = 'asciidoc'
    verbose = false
    validateSpec = false
    skipValidateSpec = true
    inputSpec = "file:///$swaggerFile"
    outputDir = "$buildDir/generated/asciidoc".toString()
    apiPackage = 'org.apache.fineract.client.services'
    invokerPackage = 'org.apache.fineract.client'
    modelPackage = 'org.apache.fineract.client.models'
    configOptions = [
        appName: 'Apache Fineract REST API',
        appDescription: '''Apache Fineract is a secure, multi-tenanted microfinance platform.
            The goal of the Apache Fineract API is to empower developers to build apps on top of the Apache Fineract Platform.
            The https://cui.fineract.dev[reference app] (username: mifos, password: password) works on the same demo tenant as the interactive links in this documentation.
            Until we complete the new REST API documentation you still have the legacy documentation available https://fineract.apache.org/legacy-docs/apiLive.htm[here].
            Please check https://fineract.apache.org/docs/current[the Fineract documentation] for more information.''',
        headerAttributes: 'false',
        infoEmail: 'dev@fineract.apache.org',
        infoUrl: 'https://fineract.apache.org',
        licenseInfo: 'Apache 2.0',
        licenseUrl: 'http://www.apache.org/licenses/LICENSE-2.0.html',
        useMethodAndPath: 'true'
    ]
    dependsOn(':fineract-provider:resolve')
}

// TODO: @vidakovic we could provide even more client libs in different languages (Go, Ruby, Swift etc.)
compileJava.dependsOn(buildJavaSdk, buildTypescriptAngularSdk, buildAsciidoc, licenseFormatMain, spotlessMiscApply)

java {
    // keep this at Java 8, not 17; see https://issues.apache.org/jira/browse/FINERACT-1214
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

tasks.withType(JavaCompile) {
    // the generated code in build/generated/java/src/main/java/org/apache/fineract/client/auth/OAuthOkHttpClient.java#L71 currently uses deprecated RequestBody.create(MediaType,String)
    // TODO FINERACT-1247 why does this not work:
    //   options.compilerArgs -= ["-Xlint:deprecation"]
    //   options.compilerArgs += ["-Xlint:-deprecation"]
    // So we just have to use:
    options.compilerArgs -= ["-Werror"]
}

configurations {
    generatedCompileClasspath.extendsFrom implementation
    generatedRuntimeClasspath.extendsFrom runtimeClasspath
}

test {
    useJUnitPlatform()
}

sourceSets.main.java.srcDir new File(buildDir, "generated/java/src/main/java")

// NOTE: Gradle suggested these dependencies
licenseFormatMain.dependsOn buildJavaSdk
licenseMain.dependsOn buildJavaSdk
