/*
 * 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.AndroidXComposePlugin
import androidx.build.LibraryGroups
import androidx.build.LibraryType
import androidx.build.Publish
import androidx.glance.appwidget.layoutgenerator.gradle.LayoutGeneratorTask

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

// 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.annotation:annotation:1.1.0")
    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")

    implementation('androidx.core:core-ktx:1.7.0')
    implementation("androidx.datastore:datastore:1.0.0")
    implementation("androidx.datastore:datastore-core:1.0.0")
    implementation("androidx.datastore:datastore-preferences-core:1.0.0")
    implementation("androidx.datastore:datastore-preferences:1.0.0")
    implementation(project(':core:core-remoteviews'))
    implementation(project(":glance:glance-appwidget-proto"))
    implementation(libs.kotlinStdlib)

    testImplementation(libs.junit)
    testImplementation(libs.kotlinCoroutinesTest)
    testImplementation(libs.kotlinTest)
    testImplementation(libs.mockitoCore)
    testImplementation(libs.mockitoKotlin)
    testImplementation(libs.robolectric)
    testImplementation(libs.testCore)
    testImplementation(libs.testRules)
    testImplementation(libs.testRunner)
    testImplementation(libs.truth)
    testImplementation(libs.kotlinReflect)
    testImplementation('androidx.core:core-ktx:1.7.0')
    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")

    androidTestImplementation(project(":test:screenshot:screenshot"))
    androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0")
    androidTestImplementation('androidx.core:core-ktx:1.7.0')
    androidTestImplementation(libs.espressoCore)
    androidTestImplementation(libs.espressoIdlingResource)
    androidTestImplementation(libs.kotlinCoroutinesTest)
    androidTestImplementation(libs.kotlinTest)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testExtJunitKtx)
    androidTestImplementation(libs.testRules)
    androidTestImplementation(libs.testRunner)
    androidTestImplementation(libs.truth)
    androidTestImplementation(libs.kotlinReflect)
}

android {
    // Use Robolectric 4.+
    testOptions.unitTests.includeAndroidResources = true

    sourceSets {
        androidTest.assets.srcDirs += project.rootDir.absolutePath + "/../../golden/glance/glance-appwidget"
    }

    buildTypes {
        debug {
            pseudoLocalesEnabled true
        }
    }

    buildTypes.all {
        consumerProguardFiles "proguard-rules.pro"
    }
}

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

LayoutGeneratorTask.registerLayoutGenerator(
        project,
        android,
        /* layoutDirectory= */ file("src/androidMain/layoutTemplates")
)
