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

plugins {
  id 'com.android.application'
  id "org.jetbrains.kotlin.android"
  id 'org.jetbrains.kotlin.plugin.parcelize'
  id 'com.google.devtools.ksp'
}

android {
  namespace 'com.airbnb.lottie.samples'
  compileSdk 34
  defaultConfig {
    applicationId "com.airbnb.lottie"
    minSdk 16
    targetSdk 34
    versionCode 70
    versionName VERSION_NAME
    multiDexEnabled true
    buildConfigField("String", "GIT_SHA", "\"" + gitSha + "\"")
    buildConfigField("String", "GIT_BRANCH", "\"" + gitBranch + "\"")
    vectorDrawables.useSupportLibrary = true
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
  }
  buildFeatures {
    viewBinding true
    buildConfig true
  }
  buildTypes {
    debug {
      multiDexKeepProguard file('proguard-multidex-rules.pro')
    }
    release {
      multiDexKeepProguard file('proguard-multidex-rules.pro')
      minifyEnabled false
    }
  }
  lintOptions {
    ignore 'InvalidPackage'
    ignore 'VectorDrawableCompat'
    textReport true
    textOutput 'stdout'
    baseline file("lint-baseline.xml")
  }
  kotlinOptions {
    freeCompilerArgs += ["-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi"]
  }
  packagingOptions {
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/NOTICE'
  }
}

dependencies {
  implementation project(':lottie')
  implementation libs.androidx.multidex

  implementation libs.androidx.appcompat
  implementation libs.androidx.fragment
  implementation libs.androidx.recyclerview
  implementation libs.androidx.paging.runtime.ktx
  implementation libs.androidx.viewmodel.ktx
  implementation libs.androidx.cardview
  implementation libs.androidx.core.ktx
  implementation libs.androidx.constraintlayout
  implementation libs.androidx.browser
  implementation libs.google.material

  implementation libs.epoxy
  ksp libs.epoxy.processor
  implementation libs.mavericks

  implementation libs.kotlinx.coroutines.android
  implementation libs.qrcodereaderview
  implementation libs.mpandroidchart
  implementation libs.gson
  implementation libs.okhttp
  implementation libs.retrofit
  implementation libs.retrofit.rxjava
  implementation libs.retrofit.gson
  implementation libs.glide

  debugImplementation libs.androidx.fragment.testing

  testImplementation libs.junit4
  androidTestImplementation libs.androidx.test.junit
  androidTestImplementation libs.androidx.test.espresso
  androidTestImplementation libs.androidx.test.espresso.idling
  androidTestImplementation libs.androidx.test.core
  androidTestImplementation libs.androidx.test.rules
  androidTestImplementation libs.mockito.android
  androidTestImplementation libs.mockito.kotlin
}
