apply plugin: 'com.android.library'

def BADoclet_Path = 'C:/Program Files (x86)/Anywhere Software/Basic4android/SimpleLibraryCompiler'
def B4A_AdditionalLibs = 'C:/Program Files (x86)/Anywhere Software/Basic4android/Additional Libraries'
def Optional_B4AStaticClass = 'none'
def Optional_B44IgnoreClasses = 'none'

def buildTempLibs = "$buildDir" + File.separator + "tmp" + File.separator + "libs"
def buildClasses = "$buildDir" + File.separator + "classes"

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        minSdkVersion 22
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles 'consumer-rules.pro'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = "1.8"
    }

    sourceSets {
        main {
            java {filter.excludes = ["dummy/*.java"]}
        }
    }
    //task makeJar(type: Copy) {
       // delete 'build/libs/myjar.jar'
        //from('build/intermediates/aar_main_jar/release/')
        //into('build/libs/')
        //include('classes.jar')
       // rename ('classes.jar', 'myjar.jar')
    //}

   // makeJar.dependsOn(build)


}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.3.0'
    implementation files('../libs/B4AShared.jar')
    implementation files('../libs/Core.jar')
    implementation files('libs/pinyin4j-2.5.1.jar')
    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
    implementation 'org.tensorflow:tensorflow-lite:0.0.0-nightly'
    implementation 'org.tensorflow:tensorflow-lite-select-tf-ops:0.0.0-nightly'
    implementation 'org.tensorflow:tensorflow-lite-support:0.0.0-nightly'

    //implementation 'com.belerweb:pinyin4j:2.5.1'
}


configurations {

    println("Check directories")
    File BADocletPath = new File (BADoclet_Path)
    if (!BADocletPath.exists()){
        throw new FileNotFoundException('BADoclet path not found! Please, check BADoclet_Path.')
    }
    File B4xPath = new File (B4A_AdditionalLibs)
    if (!B4xPath.exists()){
        throw new FileNotFoundException('B4X Additional Libraries path not found! Please, check B4A_AdditionalLibs.')
    }

    println("Copy api (jar file) into libs directory")
    configurations.api.canBeResolved(true)
    copy {
        from configurations.api
        into 'libs'
    }

    println("Prepare environment for Javadoc")
    configurations.implementation.canBeResolved(true)
    configurations.implementation
            .each { archive ->
                if (archive.name.endsWith('.aar')) {
                    copy {
                        from zipTree(archive)
                        include "**"  + File.separator + "classes.jar"
                        into buildTempLibs + File.separator + "${archive.name.replace('.aar', '')}"
                    }
                }
                else {
                    copy {
                        from archive
                        into buildTempLibs
                    }
                }
            }
   configurations.compileOnly.canBeResolved(true)
    configurations.compileOnly
            .each { archive ->
                if (archive.name.endsWith('.aar')) {
                    copy {
                        from zipTree(archive)
                        include "**" + File.separator + "classes.jar"
                        into buildTempLibs + File.separator + "${archive.name.replace('.aar', '')}"
                    }
                }
                else {
                    copy {
                        from archive
                        into buildTempLibs
                    }
                }
            }

}

tasks.register("b4xJavadoc", Javadoc) {
    File javadocFile = new File(B4A_AdditionalLibs + File.separator + thisObject.getName() + ".xml")

    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
    classpath += fileTree(dir: buildTempLibs)

    source = "src" + File.separator + "main" + File.separator + "java"

    options.docletpath = [file(BADoclet_Path)]
    options.doclet = "BADoclet"
    options.addStringOption("b4atarget", javadocFile.absoluteFile.toString())
    options.addStringOption("b4aignore", Optional_B44IgnoreClasses)
}

tasks.whenTaskAdded {
    theTask ->
        if (theTask.name.contains("assembleRelease")) {
            theTask.dependsOn(b4xJavadoc)
            doLast{
                println("CreateDummyJar")
                ant.mkdir(dir: buildClasses)
                ant.javac(
                        release: "8",
                        srcdir: "src" + File.separator + "main" + File.separator + "java" + File.separator + "dummy",
                        destdir: buildClasses,
                        debug: "false",
                        includeantruntime: "false",
                        classpath: ".." + File.separator + "libs" + File.separator + "b4a" + File.separator + "B4AShared.jar"
                )
                ant.jar(
                        basedir: buildClasses,
                        jarfile: B4A_AdditionalLibs + File.separator + thisObject.getName() + '.jar'
                )

                println("Copy aar files to B4X Additional Libraries")
                copy {
                    from "$buildDir" + File.separator + "outputs" + File.separator + "aar" + File.separator + thisObject.getName() + "-release.aar"
                    into B4A_AdditionalLibs
                    rename(thisObject.getName() + '-release.aar', thisObject.getName() + '.aar')
                }

                println("Update Javadoc")
                ant.replaceregexp(
                        file: B4A_AdditionalLibs + File.separator + thisObject.getName() + '.xml',
                        match: '\\<class\\>(\\n *\\<name\\>' + Optional_B4AStaticClass + '\\<\\/name\\>)',
                        replace: '\\<class b4a_type=\'StaticCode\'\\>\\1',
                        flags: 'g',
                        byline: 'false'
                )
            }
        }
}