import androidx.build.gradle.gcpbuildcache.GcpBuildCache
import androidx.build.gradle.gcpbuildcache.GcpBuildCacheServiceFactory

buildscript {
    ext.supportRootFolder = buildscript.sourceFile.getParentFile().getParentFile()
    apply(from: "repos.gradle")
    repos.addMavenRepositories(repositories)

    dependencies {
        classpath("androidx.build.gradle.gcpbuildcache:gcpbuildcache:1.0.0-alpha02")
    }
}

def cacheSetting = System.getenv("USE_ANDROIDX_REMOTE_BUILD_CACHE")
def BUILD_NUMBER = System.getenv("BUILD_NUMBER")

switch (cacheSetting) {
    case "true":
    case "uplink": // legacy build cache
        gradle.settingsEvaluated { settings ->
            settings.buildCache {
                remote(HttpBuildCache) {
                    def osName = System.getProperty("os.name").toLowerCase()
                    switch (osName) {
                        case { it.contains("mac os x") }:
                        case { it.contains("darwin") }:
                        case { it.contains("osx") }:
                            url = "http://gradle-remote-cache.uplink2.goog:999/cache/"
                            break
                        default:
                            url = "http://gradle-remote-cache.uplink.goog:999/cache/"
                            break
                    }
                    allowInsecureProtocol = true
                    push = true
                }
            }
        }
        break
    case "gcp":
        gradle.settingsEvaluated { settings ->
            buildCache {
              registerBuildCacheService(GcpBuildCache, GcpBuildCacheServiceFactory)
            }

            settings.buildCache {
                remote(GcpBuildCache) {
                    projectId = "androidx-ge"
                    bucketName = "androidx-gradle-remote-cache"
                    push = (BUILD_NUMBER != null && !BUILD_NUMBER.startsWith("P"))
                }
            }
        }
        break
    case "false":
        break
    default:
        def uplinkLinux = new File("/usr/bin/uplink-helper")
        def uplinkMac = new File("/usr/local/bin/uplink-helper")
        if (uplinkLinux.exists() || uplinkMac.exists()) {
            logger.warn("\u001B[31m\nIt looks like you are a Googler running without remote build "
                    + "cache. Enable it for faster builds, see " +
                    "http://go/androidx-dev#remote-build-cache\u001B[0m\n")
        }
}
