/*
 * Copyright 2020 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import androidx.build.AndroidXPlaygroundRootPlugin
import androidx.build.AndroidXRootPlugin

// A generic build.gradle file for all playground projects that sets it up to use public artifacts.
// See README.md for details

buildscript {
    def playgroundCommonFolder = rootProject.buildFile.parentFile
    ext.supportRootFolder = playgroundCommonFolder.parentFile

    def metalavaBuildId = rootProject.properties["androidx.playground.metalavaBuildId"]
    def dokkaBuildId = rootProject.properties["androidx.playground.dokkaBuildId"]
    if (metalavaBuildId == null || dokkaBuildId == null) {
        throw new GradleException("metalava and or dokka build ids must be defined.")
    }
    def metalavaRepo = "https://androidx.dev/metalava/builds/${metalavaBuildId}/artifacts/repo/m2repository"
    def dokkaRepo = "https://androidx.dev/dokka/builds/${dokkaBuildId}/artifacts/repository"
    repositories {
        google()
        mavenCentral()
        jcenter()
        maven {
            url metalavaRepo
            metadataSources {
                mavenPom()
                artifact()
            }
        }
        maven {
            url dokkaRepo
            metadataSources {
                mavenPom()
                artifact()
            }
        }
    }

    ext.repos = [:]
    apply from: '../buildSrc/build_dependencies.gradle'

    dependencies {
        classpath build_libs.agp
        classpath build_libs.kotlin.gradle_plugin
        classpath 'androidx.build:gradle-plugin:0.1.0'
        classpath "com.github.jengelman.gradle.plugins:shadow:5.2.0"
    }
}

apply from: "../buildSrc/dependencies.gradle"
apply from: "../playground-common/out.gradle"
init.chooseOutDir("/${rootProject.name}")

apply plugin: AndroidXRootPlugin
apply plugin: AndroidXPlaygroundRootPlugin
