/*
 * Copyright 2021 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
import androidx.build.AndroidXComposePlugin

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

// Disable multi-platform; this will only be used on Android.
AndroidXComposePlugin.applyAndConfigureKotlinPlugin(project, /* isMultiplatformEnabled= */false)

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

    api(project(":glance:glance"))
    api("androidx.compose.runtime:runtime:1.1.0-beta01")
    api("androidx.compose.ui:ui-graphics:1.1.0-beta01")
    api("androidx.compose.ui:ui-unit:1.1.0-beta01")
    api("androidx.wear.tiles:tiles:1.0.0")

    implementation(libs.kotlinStdlib)
    implementation(libs.kotlinCoroutinesGuava)
    implementation "androidx.lifecycle:lifecycle-runtime:2.3.1"
    implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.3.1"
    implementation "androidx.lifecycle:lifecycle-service:2.3.1"

    testImplementation(libs.testCore)
    testImplementation(libs.testRules)
    testImplementation(libs.testRunner)
    testImplementation(libs.truth)
    testImplementation(libs.junit)
    testImplementation(libs.kotlinTest)
    testImplementation(libs.kotlinCoroutinesTest)
    testImplementation(libs.robolectric)
    testImplementation(libs.kotlinReflect)
    testImplementation(libs.mockitoCore)
    testImplementation(libs.mockitoKotlin)
    testImplementation("androidx.core:core-ktx:1.7.0")
    testImplementation("androidx.wear.tiles:tiles-testing:1.0.0")

    androidTestImplementation("androidx.core:core:1.7.0")
    androidTestImplementation("androidx.core:core-ktx:1.7.0")
    androidTestImplementation(project(":test:screenshot:screenshot"))
    androidTestImplementation("androidx.wear.tiles:tiles-renderer:1.0.0")
    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.testRules)
    androidTestImplementation(libs.kotlinTest)
    androidTestImplementation(libs.kotlinCoroutinesTest)
}

android {
    defaultConfig {
        minSdkVersion 26
    }
    // Use Robolectric 4.+
    testOptions.unitTests.includeAndroidResources = true

    lintOptions {
        // TODO(b/191286558): Remove when lint is fixed.
        disable "UnsafeOptInUsageError", "UnsafeOptInUsageWarning"
    }

    sourceSets {
        androidTest.assets.srcDirs += project.rootDir.absolutePath + "/../../golden/glance/glance-wear-tiles"
    }
    namespace "androidx.glance.wear.tiles"

}

androidx {
    name = "Glance for Wear Tiles"
    type = LibraryType.PUBLISHED_LIBRARY
    mavenGroup = LibraryGroups.GLANCE
    inceptionYear = "2021"
    description = "Glance allows developers to build layouts for Wear Tiles using a Jetpack " +
            "Compose-style API."
    targetsJavaConsumers = false
}
