/*
 * 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 {
    kotlinPlugin project(path: ":compose:compose-compiler", configuration: "embeddablePlugin")

    api project(":ui-core")
    api project(":compose:compose-runtime")
    api project(":ui-android-view-non-ir")
    api(KOTLIN_COMPOSE_STDLIB)
    api(KOTLIN_COMPOSE_COROUTINES)

    implementation "androidx.annotation:annotation:1.0.0"
    implementation "androidx.activity:activity:1.0.0-alpha01"

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

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

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