import io.invertase.gradle.common.PackageJson
import org.gradle.internal.jvm.Jvm

buildscript {
  // The Android Gradle plugin is only required when opening the android folder stand-alone.
  // This avoids unnecessary downloads and potential conflicts when the library is included as a
  // module dependency in an application project.
  if (project == rootProject) {
    repositories {
      google()
      mavenCentral()
    }

    dependencies {
      classpath("com.android.tools.build:gradle:8.4.0")
    }
  }
}

plugins {
  id "io.invertase.gradle.build" version "1.5"
}

def packageJson = PackageJson.getForProject(project)
def firebaseBomVersion = packageJson['sdkVersions']['android']['firebase']
def playServicesAuthVersion = packageJson['sdkVersions']['android']['playServicesAuth']
def jsonMinSdk = packageJson['sdkVersions']['android']['minSdk']
def jsonTargetSdk = packageJson['sdkVersions']['android']['targetSdk']
def jsonCompileSdk = packageJson['sdkVersions']['android']['compileSdk']

project.ext {
  set('react-native', [
    versions: [
      android : [
        minSdk    : jsonMinSdk,
        targetSdk : jsonTargetSdk,
        compileSdk: jsonCompileSdk,
      ],

      firebase: [
        bom: firebaseBomVersion,
      ],

      play     : [
        "play-services-auth": playServicesAuthVersion,
      ],
    ],
  ])
}

apply from: file('./firebase-json.gradle')

// If data collection isn't specifically disabled, default is enabled
String dataCollectionDefaultEnabled = 'true'

if (rootProject.ext && rootProject.ext.firebaseJson) {
  if (rootProject.ext.firebaseJson.isFlagEnabled('app_data_collection_default_enabled', true) == false) {
    dataCollectionDefaultEnabled = 'false'
  }
}

android {
  def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION.tokenize('.')[0].toInteger()
  if (agpVersion >= 7) {
    namespace 'io.invertase.firebase'
  }

  defaultConfig {
    multiDexEnabled true
    manifestPlaceholders = [
      firebaseJsonDataCollectionDefaultEnabled: dataCollectionDefaultEnabled
    ]
  }

  buildFeatures {
    // AGP 8 no longer builds config by default
    buildConfig true
  }

  lintOptions {
    disable 'GradleCompatible'
    abortOnError false
  }
  if (agpVersion < 8) {
    compileOptions {
      sourceCompatibility JavaVersion.VERSION_11
      targetCompatibility JavaVersion.VERSION_11
    }
  }

  sourceSets {
    main {
      java.srcDirs = ['src/main/java', 'src/reactnative/java']
    }
  }
}

repositories {
  google()
  mavenCentral()
}

dependencies {
  implementation platform("com.google.firebase:firebase-bom:${ReactNative.ext.getVersion("firebase", "bom")}")
  implementation "com.google.firebase:firebase-common"
  implementation "com.google.android.gms:play-services-auth:${ReactNative.ext.getVersion("play", "play-services-auth")}"
}

def jvmVersion = Jvm.current().javaVersion?.majorVersion
// if it cannot get version, just allow it to pass. This is just a helper for developers
if ((jvmVersion?.toInteger() ?: 17) < 17) {
  println("\n\n\n")
  println("**************************************************************************************************************")
  println("\n\n\n")
  println("ERROR: React Native Firebase builds with a minimum JVM version 17. We test with JVM 17 and 21.")
  println("  Incompatible major version detected: '" + jvmVersion + "'")
  println("\n\n\n")
  println("  If you receive this error because you want to use a different JDK, we may accept PRs to support new versions.")
  println("\n\n\n")
  println("**************************************************************************************************************")
  println("\n\n\n")
  System.exit(1)
}

ReactNative.shared.applyPackageVersion()
ReactNative.shared.applyDefaultExcludes()
ReactNative.module.applyAndroidVersions()
ReactNative.module.applyReactNativeDependency("api")
