/*
 * Copyright 2019 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import androidx.build.LibraryGroups
import androidx.build.LibraryVersions
import androidx.build.Publish
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

import static androidx.build.dependencies.DependenciesKt.*
import static androidx.build.dependencies.DependenciesKt.ANDROIDX_TEST_RULES
import static androidx.build.dependencies.DependenciesKt.ANDROIDX_TEST_RUNNER
import static androidx.build.dependencies.DependenciesKt.CONSTRAINT_LAYOUT_CORE
import static androidx.build.dependencies.DependenciesKt.JUNIT
import static androidx.build.dependencies.DependenciesKt.TRUTH
import static androidx.build.dependencies.DependenciesKt.getKOTLIN_STDLIB

plugins {
    id("AndroidXPlugin")
    id("com.android.library")
    id("AndroidXUiPlugin")
    id("kotlin-multiplatform")
}

dependencies {
    kotlinPlugin project(path: ":compose:compose-compiler")
}

kotlin {
    android()
    sourceSets {
        commonMain.dependencies {
            implementation(KOTLIN_STDLIB_COMMON)

            api project(":compose:core:core")
            implementation project(":compose:foundation:foundation-text")
            implementation project(":compose:runtime:runtime")
            implementation project(":compose:core:core-util")
        }

        androidMain.dependencies {
            api "androidx.annotation:annotation:1.1.0"
            implementation(CONSTRAINT_LAYOUT_CORE)
        }

        androidTest.dependencies {
            implementation(ANDROIDX_TEST_RULES)
            implementation(ANDROIDX_TEST_RUNNER)
            implementation(JUNIT)
        }

        androidAndroidTest.dependencies {
            implementation project(":compose:foundation:foundation")
            implementation project(":compose:test:test-core")

            implementation(ANDROIDX_TEST_RULES)
            implementation(ANDROIDX_TEST_RUNNER)
            implementation(JUNIT)
            implementation(TRUTH)
        }
    }
}

androidx {
    name = "Compose Foundation Layout"
    publish = Publish.SNAPSHOT_AND_RELEASE
    mavenVersion = LibraryVersions.UI
    mavenGroup = LibraryGroups.Compose.FOUNDATION
    inceptionYear = "2019"
    description = "Compose layout classes not targeting a specific design system."
}

tasks.withType(KotlinCompile).configureEach {
    kotlinOptions {
        useIR = true
    }
}
