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

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

def desktopEnabled = false // b/276387374 TODO: KmpPlatformsKt.enableDesktop(project)

androidXMultiplatform {
    android()
    if (desktopEnabled) desktop()

    sourceSets {
        commonMain {
            dependencies {
                implementation(libs.kotlinStdlibCommon)
                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.7.1")
            // workaround for https://github.com/gradle/gradle/issues/8489
            implementation("androidx.lifecycle:lifecycle-common:2.6.1")
            implementation "androidx.activity:activity-compose:1.3.1"
            api(projectOrArtifact(":compose:ui:ui-test-junit4"))
            api(project(":test:screenshot: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(libs.testCore)
            implementation(libs.testRules)
        }

        commonTest {
            dependencies {
            }
        }

        jvmMain {
            dependsOn(commonMain)
            dependencies {
            }
        }


        androidMain {
            dependsOn(jvmMain)
            dependencies {
            }
        }

        if (desktopEnabled) {
            desktopMain {
                dependsOn(jvmMain)
                dependencies {
                }
            }
        }

        jvmTest {
            dependsOn(commonTest)
            dependencies {
            }
        }

        androidAndroidTest {
            dependsOn(jvmTest)
            dependencies {
                implementation(libs.truth)
                implementation(projectOrArtifact(":compose:material:material"))
            }
        }

        // TODO(b/214407011): These dependencies leak into instrumented tests as well. If you
        //  need to add Robolectric (which must be kept out of androidAndroidTest), use a top
        //  level dependencies block instead:
        //  `dependencies { testImplementation(libs.robolectric) }`
        androidTest {
            dependsOn(jvmTest)
            dependencies {
                implementation(libs.truth)
            }
        }

        if (desktopEnabled) {
            desktopTest {
                dependsOn(jvmTest)
                dependsOn(desktopMain)
                dependencies {
                }
            }
        }
    }
}

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

android {
    namespace "androidx.compose.testutils"
}
