/*
 * Copyright 2023 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("org.jetbrains.kotlin.android")
    id("AndroidXComposePlugin")
}

dependencies {
    api(project(":glance:glance"))
    api(project(":glance:glance-appwidget"))
    api("androidx.annotation:annotation:1.2.0")
    api("androidx.compose.runtime:runtime:1.1.1")
    api("androidx.compose.ui:ui-graphics:1.1.1")
    api("androidx.compose.ui:ui-unit:1.1.1")
    api("androidx.datastore:datastore-core:1.0.0")
    api("androidx.datastore:datastore-preferences-core:1.0.0")
    api("androidx.datastore:datastore-preferences:1.0.0")

    implementation("androidx.annotation:annotation:1.1.0")
    implementation("androidx.work:work-runtime:2.7.1")
    implementation("androidx.work:work-runtime-ktx:2.7.1")
    implementation(libs.kotlinStdlib)

    // Force upgrade since 1.2.0 is not compatible with latest lint.
    implementation("androidx.annotation:annotation-experimental:1.3.0")

    testImplementation(libs.robolectric)
    testImplementation(libs.testCore)
    testImplementation(libs.testRules)
    testImplementation(libs.testRunner)
    testImplementation(libs.truth)
    testImplementation(libs.junit)
    testImplementation(libs.kotlinCoroutinesTest)
    testImplementation(libs.kotlinTest)
    testImplementation(libs.kotlinReflect)
    testImplementation(libs.mockitoCore4)
    testImplementation(libs.mockitoKotlin4)
    testImplementation("androidx.datastore:datastore-core:1.0.0")
    testImplementation("androidx.datastore:datastore-preferences-core:1.0.0")
    testImplementation("androidx.datastore:datastore-preferences:1.0.0")
    testImplementation("androidx.room:room-runtime:2.4.3")
    testImplementation("androidx.work:work-testing:2.7.1")
    testImplementation("com.google.android.material:material:1.6.0")
}

android {
    // Use Robolectric 4.+
    testOptions.unitTests.includeAndroidResources = true
    resourcePrefix "glance_template_"
    namespace "androidx.glance.template"
}

androidx {
    name = "Glance Templates"
    type = LibraryType.PUBLISHED_LIBRARY
    mavenVersion = LibraryVersions.GLANCE_TEMPLATE
    inceptionYear = "2021"
    description = "Glance allows developers to build layouts for remote surfaces using a Jetpack " +
            "Compose-style API."
    targetsJavaConsumers = false
}
