/*
 * 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.AndroidXUiPlugin
import androidx.build.Publish

import static androidx.build.dependencies.DependenciesKt.*

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

AndroidXUiPlugin.applyAndConfigureKotlinPlugin(project)

dependencies {
    kotlinPlugin(projectOrArtifact(":compose:compiler:compiler"))

    if(!AndroidXUiPlugin.isMultiplatformEnabled(project)) {
        /*
         * When updating dependencies, make sure to make the an an analogous update in the
         * corresponding block below
         */

        api("androidx.activity:activity:1.2.0")
        api(projectOrArtifact(":compose:ui:ui-test-junit4"))
        api(project(":test-screenshot"))

        implementation(KOTLIN_STDLIB_COMMON)
        implementation(projectOrArtifact(":compose:runtime:runtime"))
        implementation(projectOrArtifact(":compose:ui:ui-unit"))
        implementation(projectOrArtifact(":compose:ui:ui-graphics"))
        implementation(ANDROIDX_TEST_RULES)

        // This has stub APIs for access to legacy Android APIs, so we don't want
        // any dependency on this module.
        compileOnly(projectOrArtifact(":compose:ui:ui-android-stubs"))

        testImplementation(TRUTH)

        androidTestImplementation(TRUTH)
        androidTestImplementation(projectOrArtifact(":compose:material:material"))
    }
}

if (AndroidXUiPlugin.isMultiplatformEnabled(project)) {
    kotlin {
        android()
        /*
         * When updating dependencies, make sure to make the an an analogous update in the
         * corresponding block above
         */
        sourceSets {
            commonMain.dependencies {
                implementation(KOTLIN_STDLIB_COMMON)
                implementation(projectOrArtifact(":compose:runtime:runtime"))
                implementation(projectOrArtifact(":compose:ui:ui-unit"))
                implementation(projectOrArtifact(":compose:ui:ui-graphics"))
                implementation(projectOrArtifact(":compose:ui:ui-test-junit4"))
            }

            androidMain.dependencies {
                api("androidx.activity:activity:1.2.0")
                api(projectOrArtifact(":compose:ui:ui-test-junit4"))
                api(project(":test-screenshot"))
                // This has stub APIs for access to legacy Android APIs, so we don't want
                // any dependency on this module.
                compileOnly(projectOrArtifact(":compose:ui:ui-android-stubs"))
                implementation(ANDROIDX_TEST_RULES)
            }

            test.dependencies {
                implementation(TRUTH)
            }

            androidAndroidTest.dependencies {
                implementation(TRUTH)
                implementation(projectOrArtifact(":compose:material:material"))
            }
        }
    }
}

androidx {
    name = "Compose Internal Test Utils"
    publish = Publish.NONE
    inceptionYear = "2020"
    description = "Compose internal test utils."
}
