/*
 * Copyright 2019 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.LibraryGroups
import androidx.build.LibraryVersions
import androidx.build.Publish
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

import static androidx.build.dependencies.DependenciesKt.*

plugins {
    id("AndroidXPlugin")
    id("com.android.library")
    id("AndroidXUiPlugin")
    id("org.jetbrains.kotlin.android")
}

dependencies {
    implementation(KOTLIN_STDLIB)

    // TODO: Non-Kotlin dependency, move to Android-specific code
    implementation "androidx.collection:collection:1.1.0"
    // TODO: Non-Kotlin dependency, move to Android-specific code
    implementation "androidx.core:core:1.0.2"

    implementation project(":compose:compose-runtime")
    implementation project(":ui:ui-util")
    implementation project(":ui:ui-android-text")
    api project(":ui:ui-core")

    testImplementation(ANDROIDX_TEST_RULES)
    testImplementation(ANDROIDX_TEST_RUNNER)
    testImplementation(JUNIT)
    testImplementation(MOCKITO_CORE)
    testImplementation(TRUTH)
    testImplementation(KOTLIN_REFLECT)
    testImplementation MOCKITO_KOTLIN, {
        exclude group: 'org.mockito' // to keep control on the mockito version
    }

    androidTestImplementation(ANDROIDX_TEST_RULES)
    androidTestImplementation(ANDROIDX_TEST_RUNNER)
    androidTestImplementation(DEXMAKER_MOCKITO, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
    androidTestImplementation(ESPRESSO_CORE)
    androidTestImplementation(JUNIT)
    androidTestImplementation(MOCKITO_CORE, libs.exclude_bytebuddy) // DexMaker has it"s own MockMaker
    androidTestImplementation(TRUTH)
    androidTestImplementation MOCKITO_KOTLIN, {
        exclude group: 'org.mockito' // to keep control on the mockito version
    }
}

androidx {
    name = "AndroidX UI Text"
    publish = Publish.SNAPSHOT_AND_RELEASE
    mavenVersion = LibraryVersions.UI
    mavenGroup = LibraryGroups.UI
    inceptionYear = "2019"
    description = "AndroidX UI Text"
}

tasks.withType(KotlinCompile).configureEach {
    kotlinOptions {
        useIR = true
    }
}
