object Versions {
    const val ACRA = "4.9.2"
    const val CHUCKER = "3.2.0"
    const val COIL = "0.11.0"
    const val COROUTINES = "1.4.2"
    const val HYPERION = "0.9.27"
    const val NUCLEUS = "3.0.0"
    const val OSS_LICENSE = "17.0.0"
    const val RETROFIT = "2.7.2"
    const val ROBO_ELECTRIC = "3.1.4"
    const val RX_BINDING = "1.0.1"
    const val TIMBER = "4.7.1"
    const val WORKMANAGER = "2.5.0"
    const val aboutLibraries = "0.10.3"
    const val androidAnnotations = "1.1.0"
    const val androidAppCompat = "1.1.0"
    const val androidBiometrics = "1.0.1"
    const val androidBrowser = "1.2.0"
    const val androidCardView = "1.0.0"
    const val androidConstraintLayout = "1.1.3"
    const val androidCoreKtx = "1.3.1"
    const val androidGradlePlugin = "4.1.3"
    const val androidLifecycle = "2.2.0"
    const val androidMaterial = "1.1.0"
    const val androidMultiDex = "2.0.1"
    const val androidPalette = "1.0.0"
    const val androidPreferences = "1.1.1"
    const val androidRecyclerView = "1.1.0"
    const val androidSqlite = "2.1.0"
    const val androidWorkManager = "2.4.0"
    const val assertJ = "3.12.2"
    const val changelog = "2.1.0"
    const val chucker = "3.2.0"
    const val coil = "1.1.1"
    const val conductor = "2.1.5"
    const val directionalViewPager = "a844dbca0a"
    const val diskLruCache = "2.0.2"
    const val fastAdapter = "5.4.1"
    const val filePicker = "2.5.2"
    const val firebase = "17.5.0"
    const val firebaseCrashlytics = "17.2.1"
    const val flexibleAdapter = "5.1.0"
    const val flexibleAdapterUi = "1.0.0"
    const val flowPreferences = "1.3.2"
    const val googlePlayServices = "17.0.0"
    const val googleServices = "4.3.3"
    const val gradleVersions = "0.29.0"
    const val gson = "2.8.6"
    const val hyperion = "0.9.27"
    const val injekt = "65b0440"
    const val jsoup = "1.13.1"
    const val junit = "4.13"
    const val kotlin = "1.4.32"
    const val kotlinCoroutines = "1.3.9"
    const val kotlinSerialization = "1.1.0"
    const val kotson = "2.5.0"
    const val ktlint = "9.4.0"
    const val loadingButton = "2.2.0"
    const val materialDesignDimens = "1.4"
    const val materialDialogs = "3.1.1"
    const val mockito = "1.10.19"
    const val moshi = "1.9.3"
    const val nucleus = "3.0.0"
    const val numberSlidingPicker = "1.0.3"
    const val okhttp = "4.9.1"
    const val okio = "2.10.0"
    const val photoView = "2.3.0"
    const val reactiveNetwork = "0.13.0"
    const val requerySqlite = "3.31.0"
    const val retrofit = "2.7.2"
    const val retrofitKotlinSerialization = "0.7.0"
    const val roboElectric = "3.1.4"
    const val rxAndroid = "1.2.1"
    const val rxBinding = "1.0.1"
    const val rxJava = "1.3.8"
    const val rxPreferences = "1.0.2"
    const val rxRelay = "1.2.0"
    const val storioCommon = "8be19de@aar"
    const val storioSqlite = "8be19de@aar"
    const val stringSimilarity = "2.0.0"
    const val subsamplingImageScale = "93d74f0"
    const val systemUiHelper = "1.0.0"
    const val tagGroup = "1.6.0"
    const val tapTargetView = "1.13.0"
    const val tokenBucket = "1.7"
    const val unifile = "e9ee588"
    const val versionCompare = "1.3.4"
    const val viewStatePagerAdapter = "1.1.0"
    const val viewToolTip = "1.2.2"
    const val xlog = "1.6.1"
    const val kotlinter = "3.4.0"
}

object LegacyPluginClassPath {
    const val aboutLibraries = "com.google.android.gms:oss-licenses-plugin:${Versions.aboutLibraries}"
    const val androidGradlePlugin = "com.android.tools.build:gradle:${Versions.androidGradlePlugin}"
    const val googleServices = "com.google.gms:google-services:${Versions.googleServices}"
    const val kotlinPlugin = "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}"
    const val kotlinSerializations = "org.jetbrains.kotlin:kotlin-serialization:${Versions.kotlin}"
    const val fireBaseCrashlytics = "com.google.firebase:firebase-crashlytics-gradle:2.3.0"
}

object AndroidVersions {
    const val buildTools = "29.0.3"
    const val compileSdk = 29
    const val minSdk = 23
    const val targetSdk = 29
    const val versionCode = 72
    const val versionName = "1.0.15"
    const val ndk = "22.0.7026061"
}

object Plugins {
    const val aboutLibraries = "com.google.android.gms.oss-licenses-plugin"
    const val androidApplication = "com.android.application"
    const val firebaseCrashlytics = "com.google.firebase.crashlytics"
    const val googleServices = "com.google.gms.google-services"
    const val kapt = "kapt"
    const val kotlinParcelize = "kotlin-parcelize"
    const val kotlinAndroid = "android"
    const val jetbrainsKotlin = "org.jetbrains.kotlin.android"
    const val kotlinSerialization = "org.jetbrains.kotlin.plugin.serialization"
    val gradleVersions = PluginClass("com.github.ben-manes.versions", Versions.gradleVersions)
    val kotlinter = PluginClass("org.jmailen.kotlinter", Versions.kotlinter)
}

data class PluginClass(val name: String, val version: String)

fun isNonStable(version: String): Boolean {
    val stableKeyword = listOf("RELEASE", "FINAL", "GA").any { version.toUpperCase().contains(it) }
    val regex = "^[0-9,.v-]+(-r)?$".toRegex()
    val isStable = stableKeyword || regex.matches(version)
    return isStable.not()
}