/**
 * 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 Custom Docker Image'

apply plugin: 'java'
apply plugin: 'com.google.cloud.tools.jib'
apply from: "${rootDir}/buildSrc/src/main/groovy/org.apache.fineract.dependencies.gradle"

jib {
    from {
        image = 'azul/zulu-openjdk-alpine:21'
        platforms {
            platform {
                architecture = System.getProperty("os.arch").equals("aarch64")?"arm64":"amd64"
                os = 'linux'
            }
        }
    }

    to {
        image = 'fineract-custom'
        tags = [
            "${project.version}",
            'latest'
        ]
    }

    container {
        creationTime = 'USE_CURRENT_TIMESTAMP'
        mainClass = 'org.apache.fineract.ServerApplication'
        args = [
            '-Duser.home=/tmp',
            '-Dfile.encoding=UTF-8',
            '-Duser.timezone=UTC',
            '-Djava.security.egd=file:/dev/./urandom'
        ]
        ports = ['8080/tcp', '8443/tcp']
        labels = [maintainer: 'Aleksandar Vidakovic <aleks@apache.org>']
        user = 'nobody:nogroup'
    }

    allowInsecureRegistries = true

    dependencies {
        implementation project(':fineract-core')
        implementation project(':fineract-provider')
        // NOTE: dynamically load all custom modules
        file("${rootDir}/custom").eachDir { companyDir ->
            if('build' != companyDir.name && 'docker' != companyDir.name) {
                file("${rootDir}/custom/${companyDir.name}").eachDir { categoryDir ->
                    if('build' != categoryDir.name) {
                        file("${rootDir}/custom/${companyDir.name}/${categoryDir.name}").eachDir { moduleDir ->
                            if('build' != moduleDir.name) {
                                implementation project(":custom:${companyDir.name}:${categoryDir.name}:${moduleDir.name}")
                            }
                        }
                    }
                }
            }
        }
        // NOTE: other custom dependencies
        implementation 'org.mariadb.jdbc:mariadb-java-client'
        implementation 'com.mysql:mysql-connector-j'
        implementation 'org.postgresql:postgresql'
        annotationProcessor('org.springframework.boot:spring-boot-autoconfigure-processor')
        annotationProcessor('org.springframework.boot:spring-boot-configuration-processor')
    }

    pluginExtensions {
        pluginExtension {
            implementation = 'com.google.cloud.tools.jib.gradle.extension.layerfilter.JibLayerFilterExtension'
            configuration {
                filters {
                    filter {
                        glob = '/app/resources/**'
                    }
                }
            }
        }
    }
}
