buildscript {
    ext.safeExtGet = { prop, fallback ->
        rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
    }
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:${safeExtGet('gradlePluginVersion', '7.4.2')}"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${safeExtGet('kotlinVersion', '1.9.22')}"
    }
}

apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'

def isNewArchitectureEnabled() {
    project.hasProperty("newArchEnabled") && project.getProperty("newArchEnabled") == "true"
}

// The `com.facebook.react` gradle plugin runs @react-native/codegen for this
// library (it reads `codegenConfig` from ../package.json: name = RNFreshdeskSpec,
// android.javaPackageName = com.freshworks.freshdesk) and emits
// NativeFreshdeskSpec into build/generated/source/codegen/java. Only needed on
// the New Architecture; on the Old Architecture the hand-written
// src/oldarch/FreshdeskModuleSpec.kt base is used instead.
if (isNewArchitectureEnabled()) {
    apply plugin: "com.facebook.react"
}

android {
    // Fallbacks match sample_app's pinned, actually-tested SDK level (35) rather
    // than the bleeding edge. A consumer app's own root `ext` values still win
    // via safeExtGet, so this only affects what an otherwise-unconfigured app gets.
    compileSdkVersion safeExtGet('compileSdkVersion', 35)
    buildToolsVersion safeExtGet('buildToolsVersion', '35.0.0')
    defaultConfig {
        minSdkVersion safeExtGet('minSdkVersion', 26)
        targetSdkVersion safeExtGet('targetSdkVersion', 35)
        versionCode 1
        versionName "1.0"
        buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
    }
    buildFeatures {
        buildConfig true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    lintOptions {
        abortOnError false
        // This module is a library. Dependency floors below are pinned
        // deliberately low so the wrapper does not force consumers onto newer
        // transitive versions, and `com.facebook.react:react-native` must stay a
        // dynamic version so it resolves to whatever RN the host app uses.
        disable 'GradleDependency', 'GradleDynamicVersion'
    }
    kotlinOptions {
        jvmTarget = JavaVersion.VERSION_17
        freeCompilerArgs += [
            '-Xjvm-default=all-compatibility',
            '-Xskip-metadata-version-check',
        ]
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
    }
    namespace 'com.freshworks.freshdesk.reactnative'

    sourceSets {
        main {
            if (isNewArchitectureEnabled()) {
                java.srcDirs += [
                    "src/newarch",
                    // @react-native/codegen output from the com.facebook.react plugin
                    layout.buildDirectory.dir("generated/source/codegen/java").get().asFile
                ]
            } else {
                java.srcDirs += ["src/oldarch"]
            }
        }
    }
}

repositories {
    google()
    mavenCentral()
}

dependencies {
    implementation 'com.facebook.react:react-native:+'
    
    // Freshdesk Android SDK.
    // Exposed via `api` so host apps can drive push handling (e.g. a
    // FirebaseMessagingService that calls FreshdeskSDK directly).
    api 'com.freshworks.sdk:freshdesk:2.2.4'
    
    // AndroidX dependencies
    implementation 'androidx.core:core-ktx:1.10.1'
    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.1.0'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1'
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.1'
    implementation 'com.google.code.gson:gson:2.10.1'

    // JVM unit tests (src/test) — no Android framework / emulator needed, run via
    // `./gradlew :freshworks_react-native-freshdesk-sdk:test`. Scoped to classes
    // that don't touch android.* framework types (org.json, ReadableMap, ...),
    // which would need Robolectric instead of a plain JVM test.
    testImplementation 'junit:junit:4.13.2'
}
