plugins {
    // AGP must apply BEFORE recipe.kotlin.multiplatform — the latter calls androidTarget(),
    // which requires the Android Gradle Plugin to already be on the project.
    alias(libs.plugins.androidLibrary)
    alias(libs.plugins.koin.compiler)
    id("recipe.kotlin.multiplatform")
    alias(libs.plugins.kotlinSerialization)
    id("recipe.quality")
}

kotlin {
    explicitApi()

    androidTarget()
    iosArm64()
    iosSimulatorArm64()
    jvm()

    // No iOS framework here — composeApp's umbrella `ComposeApp.framework`
    // transitively exports shared. Producing a second framework would double-bundle
    // the Kotlin stdlib at link time (PITFALL: duplicate-framework collision).

    sourceSets {
        commonMain.dependencies {
            // Phase 2: DTOs land here (MeResponse/User per D-27). kotlinx.serialization
            // and kotlinx.datetime are the only allowed runtime dependencies in
            // shared/commonMain — D-19 / INFRA-06 forbids Ktor, Compose, SQLDelight,
            // Koin, Kermit. `api(...)` so consumers (composeApp, server) inherit the
            // @Serializable runtime + datetime types without each re-declaring them.
            api(libs.kotlinx.serializationJson)
            // Domain types need Instant (SyncMeta.updatedAt/createdAt/deletedAt) and
            // LocalDate (PlanEntry.date). kotlinx.datetime is the project's locked
            // datetime lib per CLAUDE.md; pure types, no platform deps.
            api(libs.kotlinx.datetime)
        }

        commonTest.dependencies {
            implementation(kotlin("test"))
        }
    }
}

android {
    namespace = "dev.ulfrx.recipe.shared"
    compileSdk =
        libs.versions.android.compileSdk
            .get()
            .toInt()
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_11
        targetCompatibility = JavaVersion.VERSION_11
    }
    defaultConfig {
        minSdk =
            libs.versions.android.minSdk
                .get()
                .toInt()
    }
}
