object SqlDelight {
    const val runtime = "com.squareup.sqldelight:runtime:1.5.3"
    const val android = "com.squareup.sqldelight:android-driver:1.5.3"
    const val native = "com.squareup.sqldelight:native-driver:1.5.3"

}

plugins {
    kotlin("multiplatform")
    id("com.android.library")
    id("com.squareup.sqldelight")
    kotlin("plugin.serialization") version "1.4.10"
}

kotlin {
    android()

    listOf(
        iosX64(),
        iosArm64(),
        //iosSimulatorArm64() sure all ios dependencies support this target
    ).forEach {
        it.binaries.framework {
            baseName = "shared"
        }
    }

    sourceSets {
        val commonMain by getting {
            dependencies {
                implementation("io.ktor:ktor-client-core:2.1.1")
                implementation("io.ktor:ktor-client-content-negotiation:2.1.1")
                implementation("io.ktor:ktor-serialization-kotlinx-json:2.1.1")
                implementation("io.ktor:ktor-client-logging:2.1.1")
                implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0")
                implementation("io.ktor:ktor-client-auth:2.1.1")
                implementation("org.jsoup:jsoup:1.14.3")

                //Dependency Injection
                implementation("org.kodein.di:kodein-di:7.12.0")

                //Settings
                implementation("com.russhwolf:multiplatform-settings-no-arg:0.9")

                //Logging
                implementation("io.github.aakira:napier:2.6.1")

                // Network information
                implementation("com.github.ln-12:multiplatform-connectivity-status:1.3.0")

                // Sql
                implementation(SqlDelight.runtime)
            }
        }
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test-common"))
                implementation(kotlin("test-annotations-common"))
            }
        }
        val androidMain by getting {
            dependencies {
                implementation("io.ktor:ktor-client-okhttp:2.1.1")

                // Sql
                implementation(SqlDelight.android)
            }
        }
        val androidTest by getting {
            dependencies {
                implementation(kotlin("test-junit"))
                implementation("junit:junit:4.13.2")
            }
        }
        val iosX64Main by getting
        val iosArm64Main by getting
        //val iosSimulatorArm64Main by getting
        val iosMain by creating {
            dependsOn(commonMain)
            iosX64Main.dependsOn(this)
            iosArm64Main.dependsOn(this)
            //iosSimulatorArm64Main.dependsOn(this)

            // Sql
            dependencies {
                implementation(SqlDelight.native)
            }
        }
        val iosX64Test by getting
        val iosArm64Test by getting
        //val iosSimulatorArm64Test by getting
        val iosTest by creating {
            dependsOn(commonTest)
            iosX64Test.dependsOn(this)
            iosArm64Test.dependsOn(this)
            dependencies {
                implementation("io.ktor:ktor-client-ios:2.1.1")
            }
            //iosSimulatorArm64Test.dependsOn(this)
        }
    }
}

android {
    compileSdk = 31
    sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
    defaultConfig {
        minSdk = 21
        targetSdk = 31
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    namespace = "bou.amine.apps.readerforselfossv2"
}

sqldelight {
    database("ReaderForSelfossDB") {
        packageName = "bou.amine.apps.readerforselfossv2.dao"
        sourceFolders = listOf("sqldelight")
    }
}

