// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext {
        kotlin_version = '1.8.22'
        core_version = '1.10.1'
        rxjava_version = '3.1.6'
        rxandroid_version = '3.0.2'
        rxkotlin_version = '3.0.1'
        room_version = '2.5.2'
        lifecycle_version = '2.6.1'
        dagger_version = '2.47'
        coroutines_version = '1.7.3'
        activity_version = '1.7.2'
        fragmentktx_version = '1.6.1'
        ormLite_version = '4.46'
        gson_version = '2.10.1'
        nav_version = '2.6.0'
        appcompat_version = '1.6.1'
        material_version = '1.9.0'
        gridlayout_version = '1.0.0'
        constraintlayout_version = '2.1.4'
        preferencektx_version = '1.2.1'
        commonslang3_version = '3.13.0'
        commonscodec_version = '1.16.0'
        guava_version = '32.1.2-jre'
        jodatime_version = '2.12.5'
        work_version = '2.8.1'
        tink_version = '1.10.0'
        json_version = '20230618'
        joda_version = '2.12.5'
        swipe_version = '1.1.0'

        junit_version = '4.13.2'
        junit_jupiter_version = '5.10.0'
        mockito_version = '4.6.1'
        dexmaker_version = '1.2'
        retrofit2_version = '2.9.0'
        okhttp3_version = '4.11.0'
        byteBuddy_version = '1.12.8'

        androidx_junit_version = '1.1.5'
        androidx_rules_version = '1.5.0'

        rxandroidble_version = '1.12.1'
        replayshare_version = '2.2.0'

        wearable_version = '2.9.0'
        play_services_wearable_version = '18.0.0'
        play_services_location_version = '21.0.1'

        kotlinx_datetime_version = '0.4.0'
        kotlinx_serialization_version = '1.5.1'
    }
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:8.1.0'
        classpath 'com.google.gms:google-services:4.3.15'
        classpath 'com.google.firebase:firebase-crashlytics-gradle:2.9.8'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files

        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
        classpath "org.jacoco:org.jacoco.core:0.8.10"
        classpath "com.vanniktech:gradle-dependency-graph-generator-plugin:0.8.0"
    }
}

plugins {
    // Test Gradle build, keep disabled under normal circumstances
    // id "com.osacky.doctor" version "0.8.1"
    id "org.jlleitschuh.gradle.ktlint" version "11.5.1"
    // Aggregates and/or logs Jacoco test coverage to the Gradle build log
    id 'org.barfuin.gradle.jacocolog' version '3.1.0'
    id 'org.jetbrains.kotlin.android' version "$kotlin_version" apply false
}

allprojects {
    repositories {
        google()
        mavenCentral()
        maven { url "https://maven.google.com" }
        maven { url 'https://jitpack.io' }
    }
    tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).all {
        kotlinOptions {
            freeCompilerArgs = [
                    '-opt-in=kotlin.RequiresOptIn',
                    '-Xjvm-default=all'     //Support @JvmDefault
            ]
            jvmTarget = "11"
        }
    }
    gradle.projectsEvaluated {
        tasks.withType(JavaCompile) {
            options.compilerArgs << "-Xlint:unchecked" << "-Xlint:deprecation"
        }
    }

    apply plugin: 'org.jlleitschuh.gradle.ktlint'
    apply plugin: 'jacoco'
}

// Setup all al reports aggregation
apply from: 'jacoco_project.gradle'

task clean(type: Delete) {
    delete rootProject.buildDir
}

subprojects {
    tasks.withType(Test) {
        maxParallelForks = Runtime.runtime.availableProcessors().intdiv(2) ?: 1
    }
}

// This is necessary to prevent Gradle build errors like:
//
//  Duplicate class androidx.lifecycle.ViewModelLazy found in modules jetified-lifecycle-viewmodel-ktx-2.3.1-runtime (androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1) and lifecycle-viewmodel-2.5.0-runtime (androidx.lifecycle:lifecycle-viewmodel:2.5.0)
//
// By explicitly adding these dependencies, the jetifier
// is forced to use the correct lifecycle version instead
// of automatically picking 2.3.1.
//
// See: https://stackoverflow.com/a/69832319/560774
configurations {
    all {
        exclude group: 'androidx.lifecycle', module: 'lifecycle-viewmodel-ktx'
    }
}