// Copyright 2019 The Nomulus Authors. All Rights Reserved.
//
// 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 static com.google.common.base.Strings.isNullOrEmpty;

buildscript {
  if (project.enableDependencyLocking.toBoolean()) {
    // Lock buildscript dependencies.
    configurations.classpath {
      resolutionStrategy.activateDependencyLocking()
    }
  }
}

plugins {
  // Java static analysis plugins. Keep versions consistent with ../build.gradle
  id 'nebula.lint' version '16.0.2'
  id 'net.ltgt.errorprone' version '0.6.1'
  id 'checkstyle'
  id 'com.diffplug.gradle.spotless' version '3.25.0'
}

if (rootProject.enableDependencyLocking.toBoolean()) {
  // Lock application dependencies.
  dependencyLocking {
    lockAllConfigurations()
  }
}

repositories {
  if (isNullOrEmpty(project.ext.properties.mavenUrl)) {
    println "Java dependencies: Using Maven central..."
    mavenCentral()
    google()
  } else {
    maven {
      println "Java dependencies: Using repo ${mavenUrl}..."
      url mavenUrl
    }
  }
}

apply from: '../dependencies.gradle'
apply from: '../dependency_lic.gradle'
apply from: '../java_common.gradle'

sourceSets {
  main {
    java {
      srcDirs += "${project.buildDir}/generated/source/apt/main"
    }
  }
}

checkstyle {
  configDir file('../config/checkstyle')
}

dependencies {
  def deps = dependencyMap
  compile deps['com.google.auth:google-auth-library-credentials']
  compile deps['com.google.auth:google-auth-library-oauth2-http']
  compile deps['com.google.auto.value:auto-value-annotations']
  compile deps['com.google.common.html.types:types']
  compile deps['com.google.cloud:google-cloud-core']
  compile deps['com.google.cloud:google-cloud-storage']
  compile deps['com.google.guava:guava']
  compile deps['com.google.protobuf:protobuf-java']
  compile deps['com.google.template:soy']
  compile deps['org.apache.commons:commons-text']
  annotationProcessor deps['com.google.auto.value:auto-value']
  testCompile deps['com.google.truth:truth']
  testCompile deps['com.google.truth.extensions:truth-java8-extension']
  testCompile deps['org.junit.jupiter:junit-jupiter-api']
  testCompile deps['org.junit.jupiter:junit-jupiter-engine']
  testCompile deps['org.mockito:mockito-core']
}

gradle.projectsEvaluated {
  tasks.withType(JavaCompile) {
    options.compilerArgs << "-Xlint:unchecked"
  }
}

task exportDependencies {
  def outputFileProperty = 'dependencyExportFile'
  def output = project.hasProperty(outputFileProperty)
      ? new PrintStream(
          new File(project.getProperty(outputFileProperty)))
      : System.out

  doLast {
    project.configurations.all {
      it.dependencies.findAll {
        it.group != null
      }.each {
        output.println("${it.group}:${it.name}")
      }
    }
  }
}
