import static de.fayard.refreshVersions.core.Versions.versionFor

plugins {
  id 'com.android.application'
  id "kotlin-android"
  id 'kotlin-kapt'
}

android {
  namespace 'com.airbnb.lottie.sample.compose'
  compileSdk 33
  defaultConfig {
    applicationId "com.airbnb.lottie.sample.compose"
    minSdk 21
    targetSdk 33
    versionCode 1
    versionName VERSION_NAME
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  }
  buildTypes {
    release {
      minifyEnabled false
      signingConfig signingConfigs.debug
      debuggable false
    }
  }
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_17
    targetCompatibility JavaVersion.VERSION_17
  }
  kotlinOptions {
    jvmTarget = '17'
    freeCompilerArgs += [
        "-Xallow-jvm-ir-dependencies",
        "-Xskip-prerelease-check",
        "-Xuse-experimental=kotlinx.coroutines.ExperimentalCoroutinesApi",
        "-Xuse-experimental=androidx.compose.animation.ExperimentalAnimationApi",
        "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi",
        "-Xopt-in=androidx.compose.material.ExperimentalMaterialApi",
        "-Xopt-in=kotlin.RequiresOptIn",
    ]
  }
  buildFeatures {
    compose true
    buildConfig true
  }
  composeOptions {
    kotlinCompilerExtensionVersion = versionFor(project, AndroidX.compose.compiler)
  }
  packagingOptions {
    exclude 'META-INF/AL2.0'
    exclude 'META-INF/LGPL2.1'
  }
}

kapt {
  correctErrorTypes = true
}

dependencies {
  implementation project(':lottie-compose')
  implementation libs.androidx.appcompat
  implementation libs.androidx.core.ktx
  implementation libs.androidx.activity.compose
  implementation libs.google.material
  implementation platform(libs.compose.bom)
  implementation libs.compose.ui
  implementation libs.compose.foundation
  implementation libs.compose.material
  implementation libs.compose.material.icons.extended
  implementation libs.compose.ui.tooling
  implementation libs.androidx.navigation.ui
  implementation libs.androidx.navigation.compose
  implementation libs.androidx.viewmodel.ktx
  // Need this to side load a Baseline Profile when Benchmarking
  implementation libs.profileinstaller


  implementation libs.kotlinx.coroutines.android

  implementation libs.dagger
  kapt libs.dagger.compiler

  implementation libs.retrofit
  implementation libs.retrofit.moshi
  implementation libs.coil.compose
  implementation libs.mavericks
  implementation libs.mavericks.compose

  debugImplementation libs.compose.ui.test.manifest

  androidTestImplementation libs.compose.ui.test.junit
}
