/*
 * 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.
 */

/**
 * This file was created using the `create_project.py` script located in the
 * `<AndroidX root>/development/project-creator` directory.
 *
 * Please use that script when creating a new project, rather than copying an existing project and
 * modifying its settings.
 */
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.4.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_ONLY_USED_BY_KOTLIN_CONSUMERS
    mavenVersion = LibraryVersions.GLANCE_TEMPLATE
    inceptionYear = "2021"
    description = "Glance allows developers to build layouts for remote surfaces using a Jetpack " +
            "Compose-style API."
    legacyDisableKotlinStrictApiMode = true
}
