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

buildscript {
    ext.kotlin_version = '1.8.0'

    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:8.1.1'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "org.jacoco:org.jacoco.core:0.8.7"
    }
}

allprojects {
    apply plugin: 'jacoco'

    repositories {
        google()
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
    afterEvaluate {
        tasks.withType(JavaCompile.class) {
            options.compilerArgs << "-Xmaxerrs" << "1000"
        }
    }
}

ext {
    compileSdkVersion = 34
    minSdkVersion = 21
    targetSdkVersion = 34
    buildToolsVersion = "34.0.0"
}

tasks.register('clean', Delete) {
    delete rootProject.buildDir
}

jacoco {
    toolVersion = "0.8.7"
}


tasks.register('jacocoFullReport', JacocoReport) {
    group = 'Reporting'
    description = "Generate Jacoco coverage reports for the debug build"

    reports {
        html {
            enabled true
            destination file('build/reports/jacoco/html')
        }
        xml {
            enabled true
            destination file('build/reports/jacoco/jacocoFullReport.xml')
        }
    }

    dependsOn ":app:testDebugUnitTest"
    dependsOn ":api:testDebugUnitTest"
    dependsOn ":db:testDebugUnitTest"
    dependsOn ":app:connectedAndroidTest"
    dependsOn ":db:connectedAndroidTest"

    final fileFilter = ['**/R.class', '**/R$*.class', '**/BuildConfig.*', '**/Manifest*.*', 'android/**/*.*']

    classDirectories.setFrom files([
            fileTree(dir: "$project.rootDir/app/build/intermediates/javac/debug", excludes: fileFilter),
            fileTree(dir: "$project.rootDir/app/build/tmp/kotlin-classes/debug", excludes: fileFilter),
            fileTree(dir: "$project.rootDir/api/build/intermediates/javac/debug", excludes: fileFilter),
            fileTree(dir: "$project.rootDir/api/build/tmp/kotlin-classes/debug", excludes: fileFilter),
            fileTree(dir: "$project.rootDir/db/build/tmp/kotlin-classes/debug", excludes: fileFilter),
    ])
    def coverageSourceDirs = [
            "$project.rootDir/app/src/main/java",
            "$project.rootDir/api/src/main/java",
            "$project.rootDir/db/src/main/java",
    ]

    additionalSourceDirs.setFrom files(coverageSourceDirs)
    sourceDirectories.setFrom files(coverageSourceDirs)
    executionData.setFrom fileTree(dir: project.rootDir, includes: [
            'app/jacoco.exec',
            'db/jacoco.exec',
            'api/jacoco.exec',
            'app/build/outputs/code_coverage/debugAndroidTest/connected/*-coverage.ec',
            'db/build/outputs/code_coverage/debugAndroidTest/connected/*-coverage.ec'
    ])
}
