/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you 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.
 */

rootProject.name = 'iceberg'
include 'api'
include 'common'
include 'core'
include 'data'
include 'aliyun'
include 'aws'
include 'orc'
include 'arrow'
include 'parquet'
include 'bundled-guava'
include 'spark'
include 'pig'
include 'hive-metastore'
include 'nessie'
include 'gcp'
include 'dell'

project(':api').name = 'iceberg-api'
project(':common').name = 'iceberg-common'
project(':core').name = 'iceberg-core'
project(':data').name = 'iceberg-data'
project(':aliyun').name = 'iceberg-aliyun'
project(':aws').name = 'iceberg-aws'
project(':orc').name = 'iceberg-orc'
project(':arrow').name = 'iceberg-arrow'
project(':parquet').name = 'iceberg-parquet'
project(':bundled-guava').name = 'iceberg-bundled-guava'
project(':spark').name = 'iceberg-spark'
project(':pig').name = 'iceberg-pig'
project(':hive-metastore').name = 'iceberg-hive-metastore'
project(':nessie').name = 'iceberg-nessie'
project(':gcp').name = 'iceberg-gcp'
project(':dell').name = 'iceberg-dell'

List<String> knownFlinkVersions = System.getProperty("knownFlinkVersions").split(",")
String flinkVersionsString = System.getProperty("flinkVersions") != null ? System.getProperty("flinkVersions") : System.getProperty("defaultFlinkVersions")
List<String> flinkVersions = flinkVersionsString != null && !flinkVersionsString.isEmpty() ? flinkVersionsString.split(",") : []

if (!knownFlinkVersions.containsAll(flinkVersions)) {
  throw new GradleException("Found unsupported Flink versions: " + (flinkVersions - knownFlinkVersions))
}

List<String> knownHiveVersions = System.getProperty("knownHiveVersions").split(",")
String hiveVersionsString = System.getProperty("hiveVersions") != null ? System.getProperty("hiveVersions") : System.getProperty("defaultHiveVersions")
List<String> hiveVersions = hiveVersionsString != null && !hiveVersionsString.isEmpty() ? hiveVersionsString.split(",") : []

if (!knownHiveVersions.containsAll(hiveVersions)) {
  throw new GradleException("Found unsupported Hive versions: " + (hiveVersions - knownHiveVersions))
}

List<String> knownSparkVersions = System.getProperty("knownSparkVersions").split(",")
String sparkVersionsString = System.getProperty("sparkVersions") != null ? System.getProperty("sparkVersions") : System.getProperty("defaultSparkVersions")
List<String> sparkVersions = sparkVersionsString != null && !sparkVersionsString.isEmpty() ? sparkVersionsString.split(",") : []

if (!knownSparkVersions.containsAll(sparkVersions)) {
  throw new GradleException("Found unsupported Spark versions: " + (sparkVersions - knownSparkVersions))
}

List<String> knownScalaVersions = System.getProperty("knownScalaVersions").split(",")
String scalaVersion = System.getProperty("scalaVersion") != null ? System.getProperty("scalaVersion") : System.getProperty("defaultScalaVersion")

if (!knownScalaVersions.contains(scalaVersion)) {
  throw new GradleException("Found unsupported Scala version: " + scalaVersion)
}

if (!flinkVersions.isEmpty()) {
  include 'flink'
  project(':flink').name = 'iceberg-flink'
}

if (flinkVersions.contains("1.13")) {
  include ":iceberg-flink:flink-1.13"
  include ":iceberg-flink:flink-runtime-1.13"
  project(":iceberg-flink:flink-1.13").projectDir = file('flink/v1.13/flink')
  project(":iceberg-flink:flink-1.13").name = "iceberg-flink-1.13"
  project(":iceberg-flink:flink-runtime-1.13").projectDir = file('flink/v1.13/flink-runtime')
  project(":iceberg-flink:flink-runtime-1.13").name = "iceberg-flink-runtime-1.13"
}

if (flinkVersions.contains("1.14")) {
  include ":iceberg-flink:flink-1.14"
  include ":iceberg-flink:flink-runtime-1.14"
  project(":iceberg-flink:flink-1.14").projectDir = file('flink/v1.14/flink')
  project(":iceberg-flink:flink-1.14").name = "iceberg-flink-1.14"
  project(":iceberg-flink:flink-runtime-1.14").projectDir = file('flink/v1.14/flink-runtime')
  project(":iceberg-flink:flink-runtime-1.14").name = "iceberg-flink-runtime-1.14"
}

if (flinkVersions.contains("1.15")) {
  include ":iceberg-flink:flink-1.15"
  include ":iceberg-flink:flink-runtime-1.15"
  project(":iceberg-flink:flink-1.15").projectDir = file('flink/v1.15/flink')
  project(":iceberg-flink:flink-1.15").name = "iceberg-flink-1.15"
  project(":iceberg-flink:flink-runtime-1.15").projectDir = file('flink/v1.15/flink-runtime')
  project(":iceberg-flink:flink-runtime-1.15").name = "iceberg-flink-runtime-1.15"
}

if (sparkVersions.contains("3.0")) {
  include ':iceberg-spark:spark-3.0_2.12'
  include ':iceberg-spark:spark-extensions-3.0_2.12'
  include ':iceberg-spark:spark-runtime-3.0_2.12'
  project(':iceberg-spark:spark-3.0_2.12').projectDir = file('spark/v3.0/spark')
  project(':iceberg-spark:spark-3.0_2.12').name = 'iceberg-spark-3.0_2.12'
  project(':iceberg-spark:spark-extensions-3.0_2.12').projectDir = file('spark/v3.0/spark-extensions')
  project(':iceberg-spark:spark-extensions-3.0_2.12').name = 'iceberg-spark-extensions-3.0_2.12'
  project(':iceberg-spark:spark-runtime-3.0_2.12').projectDir = file('spark/v3.0/spark-runtime')
  project(':iceberg-spark:spark-runtime-3.0_2.12').name = 'iceberg-spark-runtime-3.0_2.12'
}

if (sparkVersions.contains("3.1")) {
  include ':iceberg-spark:spark-3.1_2.12'
  include ':iceberg-spark:spark-extensions-3.1_2.12'
  include ':iceberg-spark:spark-runtime-3.1_2.12'
  project(':iceberg-spark:spark-3.1_2.12').projectDir = file('spark/v3.1/spark')
  project(':iceberg-spark:spark-3.1_2.12').name = 'iceberg-spark-3.1_2.12'
  project(':iceberg-spark:spark-extensions-3.1_2.12').projectDir = file('spark/v3.1/spark-extensions')
  project(':iceberg-spark:spark-extensions-3.1_2.12').name = 'iceberg-spark-extensions-3.1_2.12'
  project(':iceberg-spark:spark-runtime-3.1_2.12').projectDir = file('spark/v3.1/spark-runtime')
  project(':iceberg-spark:spark-runtime-3.1_2.12').name = 'iceberg-spark-runtime-3.1_2.12'
}

if (sparkVersions.contains("3.2")) {
  include ":iceberg-spark:spark-3.2_${scalaVersion}"
  include ":iceberg-spark:spark-extensions-3.2_${scalaVersion}"
  include ":iceberg-spark:spark-runtime-3.2_${scalaVersion}"
  project(":iceberg-spark:spark-3.2_${scalaVersion}").projectDir = file('spark/v3.2/spark')
  project(":iceberg-spark:spark-3.2_${scalaVersion}").name = "iceberg-spark-3.2_${scalaVersion}"
  project(":iceberg-spark:spark-extensions-3.2_${scalaVersion}").projectDir = file('spark/v3.2/spark-extensions')
  project(":iceberg-spark:spark-extensions-3.2_${scalaVersion}").name = "iceberg-spark-extensions-3.2_${scalaVersion}"
  project(":iceberg-spark:spark-runtime-3.2_${scalaVersion}").projectDir = file('spark/v3.2/spark-runtime')
  project(":iceberg-spark:spark-runtime-3.2_${scalaVersion}").name = "iceberg-spark-runtime-3.2_${scalaVersion}"
}

if (sparkVersions.contains("3.3")) {
  include ":iceberg-spark:spark-3.3_${scalaVersion}"
  include ":iceberg-spark:spark-extensions-3.3_${scalaVersion}"
  include ":iceberg-spark:spark-runtime-3.3_${scalaVersion}"
  project(":iceberg-spark:spark-3.3_${scalaVersion}").projectDir = file('spark/v3.3/spark')
  project(":iceberg-spark:spark-3.3_${scalaVersion}").name = "iceberg-spark-3.3_${scalaVersion}"
  project(":iceberg-spark:spark-extensions-3.3_${scalaVersion}").projectDir = file('spark/v3.3/spark-extensions')
  project(":iceberg-spark:spark-extensions-3.3_${scalaVersion}").name = "iceberg-spark-extensions-3.3_${scalaVersion}"
  project(":iceberg-spark:spark-runtime-3.3_${scalaVersion}").projectDir = file('spark/v3.3/spark-runtime')
  project(":iceberg-spark:spark-runtime-3.3_${scalaVersion}").name = "iceberg-spark-runtime-3.3_${scalaVersion}"
}

// hive 3 depends on hive 2, so always add hive 2 if hive3 is enabled
if (hiveVersions.contains("2") || hiveVersions.contains("3")) {
  include 'mr'
  include 'hive-runtime'

  project(':mr').name = 'iceberg-mr'
  project(':hive-runtime').name = 'iceberg-hive-runtime'
}

if (JavaVersion.current() == JavaVersion.VERSION_1_8) {
  if (sparkVersions.contains("2.4")) {
    include ':iceberg-spark:spark-2.4'
    include ':iceberg-spark:spark-runtime-2.4'

    project(':iceberg-spark:spark-2.4').projectDir = file('spark/v2.4/spark')
    project(':iceberg-spark:spark-2.4').name = 'iceberg-spark-2.4'
    project(':iceberg-spark:spark-runtime-2.4').projectDir = file('spark/v2.4/spark-runtime')
    project(':iceberg-spark:spark-runtime-2.4').name = 'iceberg-spark-runtime-2.4'
  }

  if (hiveVersions.contains("3")) {
    include 'hive3'
    include 'hive3-orc-bundle'

    project(':hive3').name = 'iceberg-hive3'
    project(':hive3-orc-bundle').name = 'iceberg-hive3-orc-bundle'
  }
}

