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

plugins {
    id("AndroidXPlugin")
    id("kotlin")
}

dependencies {
    // Atomic Group
    constraints {
        implementation(project(":paging:paging-runtime"))
        // syntax is temp workaround to allow project dependency on cross-project-set
        // i.e. COMPOSE + MAIN project sets
        // update syntax when b/239979823 is fixed
        implementation("androidx.paging:paging-compose:${androidx.LibraryVersions.PAGING_COMPOSE}")
    }

    api("androidx.annotation:annotation:1.3.0")
    api("androidx.arch.core:core-common:2.1.0")
    api(libs.kotlinStdlib)
    api(libs.kotlinCoroutinesCore)

    testImplementation(libs.junit)
    testImplementation(libs.mockitoCore4)
    testImplementation(libs.mockitoKotlin4)
    testImplementation(project(":internal-testutils-common"))
    testImplementation(project(":internal-testutils-ktx"))
    testImplementation(project(":internal-testutils-paging"))
    testImplementation(libs.kotlinTest)
    testImplementation(libs.kotlinCoroutinesTest)
    testImplementation(libs.truth)

    samples(project(":paging:paging-samples"))
}

androidx {
    name = "Android Paging-Common"
    publish = Publish.SNAPSHOT_AND_RELEASE
    inceptionYear = "2017"
    description = "Android Paging-Common"
}
