/*
 * Copyright (C) 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 org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import androidx.build.LibraryType
import androidx.build.Publish

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

// If set to `true`, we'll use KSP instead of KAPT.
// Note that the CI does not run tests with KSP yet so this is only for local usage.
// Once variants are properly supported by both ksp and AndroidX, we'll add support for this.
// (b/153917176)
def useKsp = project.properties.getOrDefault("useKsp", "false").toBoolean()
if (useKsp) {
    apply plugin: "com.google.devtools.ksp"
} else {
    apply plugin: "kotlin-kapt"
}

android {
    defaultConfig {
        multiDexEnabled true
    }
    namespace "androidx.room.paging"
}

dependencies {
    api(libs.kotlinStdlib)

    api(project(":room:room-runtime"))
    implementation(project(":room:room-ktx"))
    api("androidx.paging:paging-common:3.1.1")

    androidTestImplementation(libs.kotlinCoroutinesTest)
    androidTestImplementation(libs.multidex)
    androidTestImplementation(libs.kotlinTestJunit)
    androidTestImplementation(libs.junit)
    androidTestImplementation(libs.testExtJunit)
    androidTestImplementation(libs.testCore)
    androidTestImplementation(libs.testRunner)
    // depend on the shadowed version so that it tests with the shipped artifact
    // this is a temporary attribute until KSP and AndroidX plugin supports variants.
    // addendum -- shadowAndImplementation removed
    if (useKsp) {
        kspAndroidTest(
                project(path: ":room:room-compiler")
        )
    } else {
        kaptAndroidTest(
                project(path: ":room:room-compiler")
        )
    }
    androidTestImplementation(libs.truth)
    androidTestImplementation("androidx.arch.core:core-testing:2.0.1")
    androidTestImplementation(project(":internal-testutils-common"))
}

// Allow usage of Kotlin's @OptIn.
tasks.withType(KotlinCompile).configureEach {
    kotlinOptions {
        freeCompilerArgs += ["-opt-in=kotlin.RequiresOptIn"]
    }
}

androidx {
    name = "Room Paging"
    type = LibraryType.PUBLISHED_LIBRARY
    mavenGroup = LibraryGroups.ROOM
    inceptionYear = "2021"
    description = "Room Paging integration"
    publish = Publish.SNAPSHOT_AND_RELEASE
}
