buildscript {
    repositories {
        jcenter()
    }
}

plugins {
    id "org.jetbrains.kotlin.multiplatform"
    id "com.android.library"
    id "maven-publish"
}


kotlin {
    jvm("jvm6") {
        compilations.main.kotlinOptions {
            jvmTarget = "1.6"
        }
    }

    android()

    targets {
        // Select iOS target for real device or emulator.
        final def iOSIsRealDevice = System.getenv('SDK_NAME')?.startsWith("iphoneos")
        final def iOSTarget = iOSIsRealDevice ? presets.iosArm64 : presets.iosX64

        // iOS target.
        fromPreset(iOSTarget, 'ios') {
            binaries {
                framework {
                    baseName = "fints4k"

                    export(project(":common"))
                }
            }
        }
    }

    js() {

        nodejs {
            testTask {
                enabled = false
            }
        }

        browser {
            testTask {
                enabled = false
            }

        }
    }


    sourceSets {
        commonMain {
            dependencies {
                implementation kotlin("stdlib-common")
                implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:$kotlinCoroutinesVersion"

                api project(":common")

                implementation "io.ktor:ktor-client-core:$ktorVersion"
            }
        }

        commonTest {
            dependencies {
                implementation kotlin("test-common")
                implementation kotlin("test-annotations-common")

                implementation "ch.tutteli.atrium:atrium-fluent-en_GB:$atriumVersion"
            }
        }


        jvm6Main {
            dependencies {
//                implementation "io.ktor:ktor-client-cio:$ktorVersion"
                implementation "io.ktor:ktor-client-okhttp:$ktorVersion"

                implementation "org.slf4j:slf4j-api:$slf4jVersion"
            }
        }

        jvm6Test {
            dependencies {
                implementation kotlin("test-junit")

                implementation "org.junit.jupiter:junit-jupiter:$junit5Version"
                runtimeOnly "org.junit.jupiter:junit-jupiter-engine:$junit5Version"

                implementation "org.assertj:assertj-core:$assertJVersion"
                implementation "org.mockito:mockito-core:$mockitoVersion"

                implementation "ch.tutteli.atrium:atrium-api-fluent-en_GB-jdk8:$atriumVersion"


                implementation project(":BankingUiCommon")
                implementation project(":BankFinder")
                implementation project(":fints4kBankingClient")


                implementation "org.apache.commons:commons-csv:1.8"

                implementation "org.slf4j:slf4j-simple:$slf4jVersion"
            }

        }


        androidMain {
            dependsOn jvm6Main

            dependencies {
                implementation "io.ktor:ktor-client-android:$ktorVersion"
            }
        }

        iosMain {
            dependencies {
                implementation "org.jetbrains.kotlin:kotlin-stdlib-common:$kotlinVersion"

                implementation "io.ktor:ktor-client-ios:$ktorVersion"
                implementation "io.ktor:ktor-client-core-native:$ktorVersion"
            }
        }


        jsMain {
            dependsOn commonMain

            dependencies {
                api kotlin("stdlib-js")

                implementation "io.ktor:ktor-client-js:$ktorVersion"
                implementation "io.ktor:ktor-client-encoding-js:$ktorVersion"
                implementation "io.ktor:ktor-client-js-kotlinMultiplatform:$ktorVersion"
            }
        }

        jsTest {
            dependencies {
                implementation kotlin("test-js")

                implementation "ch.tutteli.atrium:atrium-fluent-en_GB-js:$atriumVersion"
            }
        }

    }
}


// Task to generate iOS framework for xcode projects.
task packForXcode(type: Sync) {

    final File frameworkDir = new File(buildDir, "xcode-frameworks")
    final String mode = project.findProperty("XCODE_CONFIGURATION")?.toUpperCase() ?: 'DEBUG'

    final def framework = kotlin.targets.ios.binaries.getFramework("", mode)

    inputs.property "mode", mode
    dependsOn framework.linkTask

    from { framework.outputFile.parentFile }
    into frameworkDir

    doLast {
        new File(frameworkDir, 'gradlew').with {
            text = "#!/bin/bash\nexport 'JAVA_HOME=${System.getProperty("java.home")}'\ncd '${rootProject.rootDir}'\n./gradlew \$@\n"
            setExecutable(true)
        }
    }
}

// Run packForXcode when building.
tasks.build.dependsOn packForXcode


android {
    compileSdkVersion androidCompileSdkVersion


    defaultConfig {
        minSdkVersion androidMinSdkVersion
        targetSdkVersion androidTargetSdkVersion

        versionName version
        versionCode appVersionCode

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    packagingOptions {
        pickFirst 'META-INF/ktor-http.kotlin_module'
        pickFirst 'META-INF/kotlinx-io.kotlin_module'
        pickFirst 'META-INF/atomicfu.kotlin_module'
        pickFirst 'META-INF/ktor-utils.kotlin_module'
        pickFirst 'META-INF/kotlinx-coroutines-io.kotlin_module'
        pickFirst 'META-INF/ktor-client-core.kotlin_module'
        pickFirst 'META-INF/DEPENDENCIES'
        pickFirst 'META-INF/NOTICE'
        pickFirst 'META-INF/LICENSE'
        pickFirst 'META-INF/LICENSE.txt'
        pickFirst 'META-INF/NOTICE.txt'
    }

    lintOptions {
        abortOnError false
    }

}