/*
 * SPDX-FileCopyrightText: 2013 microG Project Team
 * SPDX-License-Identifier: Apache-2.0
 */

buildscript {
    ext.cronetVersion = '102.5005.125'
    ext.wearableVersion = '0.1.1'

    ext.kotlinVersion = '1.9.22'
    ext.coroutineVersion = '1.7.3'

    ext.annotationVersion = '1.7.1'
    ext.appcompatVersion = '1.6.1'
    ext.biometricVersion = '1.1.0'
    ext.coreVersion = '1.12.0'
    ext.fragmentVersion = '1.6.2'
    ext.lifecycleVersion = '2.7.0'
    ext.loaderVersion = '1.1.0'
    ext.materialVersion = '1.11.0'
    ext.mediarouterVersion = '1.6.0'
    ext.multidexVersion = '2.0.1'
    ext.navigationVersion = '2.7.7'
    ext.preferenceVersion = '1.2.0'
    ext.recyclerviewVersion = '1.3.2'
    ext.webkitVersion = '1.10.0'

    ext.slf4jVersion = '1.7.36'
    ext.volleyVersion = '1.2.1'
    ext.okHttpVersion = '4.12.0'
    ext.ktorVersion = '2.3.12'
    ext.wireVersion = '4.9.9'
    ext.tinkVersion = '1.13.0'

    ext.androidBuildGradleVersion = '8.2.2'

    ext.androidBuildVersionTools = '34.0.0'

    ext.androidMinSdk = 19
    ext.androidTargetSdk = 29
    ext.androidCompileSdk = 35

    ext.localProperties = new Properties()

    try {
        var stream = rootProject.file('local.properties').newDataInputStream()
        ext.localProperties.load(stream)
        stream.close()
    } catch (ignored) {
        // Ignore
    }

    ext.hasModule = (String name, boolean enabledByDefault) -> {
        return ext.localProperties.getProperty("modules." + name, enabledByDefault.toString()).toBoolean()
    }

    repositories {
        mavenCentral()
        google()
    }

    dependencies {
        classpath "com.android.tools.build:gradle:$androidBuildGradleVersion"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        classpath "com.squareup.wire:wire-gradle-plugin:$wireVersion"
    }
}

def execResult(... args) {
    providers.exec { commandLine args }.standardOutput.asText.get()
}

def ignoreGit = providers.environmentVariable('GRADLE_MICROG_VERSION_WITHOUT_GIT').getOrElse('0') == '1'
def gmsVersion = "25.09.32"
def gmsVersionCode = Integer.parseInt(gmsVersion.replaceAll('\\.', ''))
def vendingVersion = "40.2.26"
def vendingVersionCode = Integer.parseInt(vendingVersion.replaceAll('\\.', ''))
def gitVersionBase = !ignoreGit ? execResult('git', 'describe', '--tags', '--abbrev=0', '--match=v[0-9]*').trim().substring(1) : "v0.0.0.$gmsVersionCode"
def gitCommitCount = !ignoreGit ? Integer.parseInt(execResult('git', 'rev-list', '--count', "v$gitVersionBase..HEAD").trim()) : 0
def gitCommitId = !ignoreGit ? execResult('git', 'show-ref', '--abbrev=7', '--head', 'HEAD').trim().split(' ')[0] : '0000000'
def gitDirty = false
if (!ignoreGit) {
  execResult('git', 'status', '--porcelain').lines().each { stat ->
    def status = stat.substring(0,2)
    def file = stat.substring(3)
    if (status == '??') {
      if (subprojects.any { p -> file.startsWith(p.name + '/') }) {
        logger.lifecycle('Dirty file: {} (untracked)', file)
        gitDirty = true
      } else {
        logger.info('New file outside module: {} (ignored for dirty check)', file)
      }
    } else {
      logger.lifecycle('Dirty file: {} (changed)', file)
      gitDirty = true
    }
  }
}
def ourVersionBase = gitVersionBase.substring(0, gitVersionBase.lastIndexOf('.'))
def ourVersionMinor = Integer.parseInt(ourVersionBase.substring(ourVersionBase.lastIndexOf('.') + 1))
def ourGmsVersionCode = gmsVersionCode * 1000 + ourVersionMinor * 2  + (gitCommitCount > 0 || gitDirty ? 1 : 0)
def ourGmsVersionName = "$ourVersionBase.$gmsVersionCode" + (gitCommitCount > 0 && !gitDirty ? "-$gitCommitCount" : "") + (gitDirty ? "-dirty" : "") + (gitCommitCount > 0 && !gitDirty ? " ($gitCommitId)" : "")
def ourVendingVersionCode = 80000000 + vendingVersionCode * 100 + ourVersionMinor * 2  + (gitCommitCount > 0 || gitDirty ? 1 : 0)
def ourVendingVersionName = "$ourVersionBase.$vendingVersionCode" + (gitCommitCount > 0 && !gitDirty ? "-$gitCommitCount" : "") + (gitDirty ? "-dirty" : "") + (gitCommitCount > 0 && !gitDirty ? " ($gitCommitId)" : "")
logger.lifecycle('Starting build for GMS version {} ({})...', ourGmsVersionName, ourGmsVersionCode)

allprojects {
    apply plugin: 'idea'

    group = 'org.microg.gms'
    version = ourGmsVersionName
    ext.vendingAppVersionName = ourVendingVersionName
    ext.vendingAppVersionCode = ourVendingVersionCode
    ext.appVersionCode = ourGmsVersionCode
    ext.isReleaseVersion = false
}

subprojects {
    repositories {
        mavenCentral()
        google()
        if (hasModule("hms", false)) maven {url 'https://developer.huawei.com/repo/'}
    }
}

