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 AndroidX.core.ktx
  implementation AndroidX.activity.compose
  implementation AndroidX.appCompat
  implementation AndroidX.compose.ui
  implementation AndroidX.compose.ui.tooling
  implementation AndroidX.compose.material

  implementation Square.okHttp3

  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 AndroidX.test.ext.junit
  androidTestImplementation AndroidX.test.espresso.core
  androidTestImplementation AndroidX.test.espresso.idlingResource
  androidTestImplementation AndroidX.test.core
  androidTestImplementation AndroidX.test.rules
  androidTestImplementation libs.jjwt
  androidTestImplementation Testing.mockito.android
  androidTestImplementation Testing.mockito.kotlin
}
