apply plugin: "com.android.application"
apply plugin: "com.github.spotbugs"
apply plugin: "pmd"

def ABORT_ON_CHECK_FAILURE = false

tasks.withType(Test) {
    systemProperty "MiFirmwareDir", System.getProperty("MiFirmwareDir", null)
    systemProperty "logback.configurationFile", System.getProperty("user.dir", null) + "/app/src/main/assets/logback.xml"
    systemProperty "GB_LOGFILES_DIR", java.nio.file.Files.createTempDirectory("gblog").toString()
}

android {
    compileOptions {
        // for KitKat
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }
    compileSdkVersion 28
    buildToolsVersion '29.0.2'

    defaultConfig {
        applicationId "nodomain.freeyourgadget.gadgetbridge"
        minSdkVersion 19
        targetSdkVersion 28

        // Note: always bump BOTH versionCode and versionName!
        versionName "0.45.1"
        versionCode 177
        vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        }
    }

    lintOptions {
        abortOnError ABORT_ON_CHECK_FAILURE
        lintConfig file("${project.rootDir}/config/lint/lint.xml")
// If true, generate an HTML report (with issue explanations, sourcecode, etc)
        htmlReport true
// Optional path to report (default will be lint-results.html in the builddir)
        htmlOutput file("$project.buildDir/reports/lint/lint.html")
    }

    testOptions {
        unitTests {
            returnDefaultValues = true
            includeAndroidResources = true
        }
    }
}

pmd {
    toolVersion = "5.5.5"
}

dependencies {
//    testImplementation "ch.qos.logback:logback-classic:1.1.3"
//    testImplementation "ch.qos.logback:logback-core:1.1.3"
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    testImplementation "junit:junit:4.12"
    testImplementation "org.mockito:mockito-core:1.10.19"
    testImplementation "org.robolectric:robolectric:4.2.1"
    testImplementation "com.google.code.gson:gson:2.8.5"

    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "androidx.appcompat:appcompat:1.1.0"
    implementation "androidx.preference:preference:1.1.1"
    implementation "androidx.cardview:cardview:1.0.0"
    implementation "androidx.recyclerview:recyclerview:1.1.0"
    implementation "androidx.legacy:legacy-support-v4:1.0.0"
    implementation "androidx.gridlayout:gridlayout:1.0.0"
    implementation "com.google.android.material:material:1.1.0"
    implementation "androidx.palette:palette:1.0.0"
    implementation("com.github.tony19:logback-android-classic:1.1.1-6") {
        exclude group: "com.google.android", module: "android"
    }
    implementation "org.slf4j:slf4j-api:1.7.12"
    implementation "com.github.PhilJay:MPAndroidChart:v3.1.0"
    implementation "com.github.pfichtner:durationformatter:0.1.1"
    implementation "de.cketti.library.changelog:ckchangelog:1.2.2"
    implementation "net.e175.klaus:solarpositioning:0.0.9"
    // use pristine greendao instead of our custom version, since our custom jitpack-packaged
    // version contains way too much and our custom patches are in the generator only.
    implementation "org.greenrobot:greendao:2.2.1"
    implementation "org.apache.commons:commons-lang3:3.7"
    implementation "org.cyanogenmod:platform.sdk:6.0"
    implementation 'com.jaredrummler:colorpicker:1.0.2'
//    implementation project(":DaoCore")
    implementation 'com.github.wax911:android-emojify:0.1.7'

}

preBuild.dependsOn(":GBDaoGenerator:genSources")

gradle.beforeProject {
    preBuild.dependsOn(":GBDaoGenerator:genSources")
}

check.dependsOn "spotbugsMain", "pmd", "lint"

task pmd(type: Pmd) {
    ruleSetFiles = files("${project.rootDir}/config/pmd/pmd-ruleset.xml")
    ignoreFailures = !ABORT_ON_CHECK_FAILURE
    ruleSets = [
            "java-android",
            "java-basic",
            "java-braces",
            "java-clone",
            "java-codesize",
            "java-controversial",
            "java-coupling",
            "java-design",
            "java-empty",
            "java-finalizers",
            "java-imports",
            "java-junit",
            "java-optimizations",
            "java-strictexception",
            "java-strings",
            "java-sunsecure",
            "java-typeresolution",
            "java-unnecessary",
            "java-unusedcode"
    ]

    source "src"
    include "**/*.java"
    exclude "**/gen/**"

    reports {
        xml.enabled = false
        html.enabled = true
        xml {
            destination file("$project.buildDir/reports/pmd/pmd.xml")
        }
        html {
            destination file("$project.buildDir/reports/pmd/pmd.html")
        }
    }
}

// this is just for spotbugs to let the plugin create the task
sourceSets {
    main {
        java.srcDirs = []
    }
}

spotbugs {
    toolVersion = "3.1.12"
    ignoreFailures = !ABORT_ON_CHECK_FAILURE
    effort = "default"
    reportLevel = "medium"
}

tasks.withType(com.github.spotbugs.SpotBugsTask) {
    source = fileTree('src/main/java')
    classes = files("${project.rootDir}/app/build/intermediates/javac/debug/classes")
    excludeFilter = new File("${project.rootDir}/config/findbugs/findbugs-filter.xml")
    reports {
        xml.enabled = false
        html.enabled = true
        xml {
            destination file ("$project.buildDir/reports/spotbugs/spotbugs-output.xml")
        }
        html {
            destination file ("$project.buildDir/reports/spotbugs/spotbugs-output.html")
        }
    }
}