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

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

android {
  namespace 'com.airbnb.lottie.snapshots'
  compileSdk 33
  defaultConfig {
    applicationId "com.airbnb.lottie.snapshots"
    minSdk 21
    targetSdk 33
    versionCode 1
    versionName VERSION_NAME
    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    buildConfigField("String", "GIT_BRANCH", "\"" + System.getenv("GITHUB_REF_NAME") + "\"")
    buildConfigField("String", "GIT_SHA", "\"" + System.getenv("GITHUB_SHA") + "\"")
  }

  buildTypes {
    debug {
      buildConfigField("String", "S3AccessKey", "\"" + System.getenv("LOTTIE_S3_API_KEY") + "\"")
      buildConfigField("String", "S3SecretKey", "\"" + System.getenv("LOTTIE_S3_SECRET_KEY") + "\"")
      buildConfigField("String", "HappoApiKey", "\"" + System.getenv("LOTTIE_HAPPO_API_KEY") + "\"")
      buildConfigField("String", "HappoSecretKey", "\"" + System.getenv("LOTTIE_HAPPO_SECRET_KEY") + "\"")
    }
    release {
      minifyEnabled false
    }
  }

  compileOptions {
    sourceCompatibility JavaVersion.VERSION_17
    targetCompatibility JavaVersion.VERSION_17
  }

  kotlinOptions {
    jvmTarget = JavaVersion.VERSION_17.toString()
    freeCompilerArgs += [
        "-Xallow-jvm-ir-dependencies",
        "-Xskip-prerelease-check",
        "-Xopt-in=kotlinx.coroutines.ExperimentalCoroutinesApi",
        "-Xopt-in=kotlin.RequiresOptIn",
    ]
  }
  buildFeatures {
    compose true
    viewBinding true
    buildConfig true
  }

  composeOptions {
    kotlinCompilerExtensionVersion = versionFor(project, AndroidX.compose.compiler)
  }
}

kapt {
  correctErrorTypes = true
}

dependencies {
  implementation project(':lottie-compose')
  implementation libs.androidx.appcompat
  implementation libs.androidx.core.ktx
  implementation libs.androidx.activity.compose
  implementation platform(libs.compose.bom)
  implementation libs.compose.ui
  implementation libs.compose.ui.tooling
  implementation libs.compose.material

  implementation libs.okhttp

  androidTestImplementation libs.aws.android.sdk.s3
  androidTestImplementation(libs.aws.android.sdk.mobile.client) { transitive = true }
  androidTestImplementation(libs.aws.android.sdk.auth.userpools) { transitive = true }

  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.jjwt
  androidTestImplementation libs.mockito.android
  androidTestImplementation libs.mockito.kotlin
}
