# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//build/sdk/sdk_atom.gni")

# Declares a set of data files to be added to an SDK.
#
# Parameters
#
#   category (required)
#     Publication level of the data set in SDKs.
#     See //build/sdk/sdk_atom.gni.
#
#   name (required)
#     Name of the data set in the SDK.
#
#   file (required)
#     Path to the data file to add to the SDK.
#
#   type (required)
#     Type of the data set in the SDK.
#     Currently only "license" and "config" data types are supported.

template("sdk_data") {
  assert(defined(invoker.category), "Must define an SDK category")
  assert(defined(invoker.name), "Must define an SDK name")
  assert(defined(invoker.file), "Must add data file path")
  assert(defined(invoker.type), "Must define a data type")
  assert(invoker.type == "config" || invoker.type == "license",
         "Type must be one of [config, license]")

  # The directory structure will look as follows:
  # > data/
  #   > config/
  #     > ${invoker.name}/
  #       > config.json
  #       > meta.json
  #   > license/
  #     > ${invoker.name}/
  #       > LICENSE
  #       > meta.json
  file_base = "data/${invoker.type}/${invoker.name}/"
  file_dest = ""
  if (invoker.type == "config") {
    file_dest = file_base + "config.json"
  } else if (invoker.type == "license") {
    file_dest = file_base + "LICENSE"
  }
  meta_dest = file_base + "meta.json"

  sdk_atom(target_name) {
    forward_variables_from(invoker, [ "category" ])

    id = "sdk://data/${invoker.name}"

    files = [
      {
        source = invoker.file
        dest = file_dest
      },
    ]

    meta = {
      schema = "data"
      dest = meta_dest
      value = {
        type = "${invoker.type}"
        name = invoker.name
        data = [ file_dest ]
      }
    }
  }
}
