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

#ifndef TOOLS_GN_NINJA_CREATE_BUNDLE_TARGET_WRITER_H_
#define TOOLS_GN_NINJA_CREATE_BUNDLE_TARGET_WRITER_H_

#include "gn/ninja_target_writer.h"

class BundleFileRule;

// Writes a .ninja file for a bundle_data target type.
class NinjaCreateBundleTargetWriter : public NinjaTargetWriter {
 public:
  NinjaCreateBundleTargetWriter(const Target* target, std::ostream& out);
  ~NinjaCreateBundleTargetWriter() override;

  void Run() override;

 private:
  // Writes the Ninja rule for invoking the code signing script.
  //
  // Returns the name of the custom rule generated for the code signing step if
  // defined, otherwise returns an empty string.
  std::string WriteCodeSigningRuleDefinition();

  // Writes the steps to copy files into the bundle.
  //
  // The list of newly created files will be added to |output_files|.
  void WriteCopyBundleDataSteps(const std::vector<OutputFile>& order_only_deps,
                                std::vector<OutputFile>* output_files);

  // Writes the step to copy files BundleFileRule into the bundle.
  //
  // The list of newly created files will be added to |output_files|.
  void WriteCopyBundleFileRuleSteps(
      const BundleFileRule& file_rule,
      const std::vector<OutputFile>& order_only_deps,
      std::vector<OutputFile>* output_files);

  // Writes the step to compile assets catalogs.
  //
  // The list of newly created files will be added to |output_files|.
  void WriteCompileAssetsCatalogStep(
      const std::vector<OutputFile>& order_only_deps,
      std::vector<OutputFile>* output_files);

  // Writes the stamp file for the assets catalog compilation input
  // dependencies.
  OutputFile WriteCompileAssetsCatalogInputDepsStamp(
      const std::vector<const Target*>& dependencies);

  // Writes the code signing step (if a script is defined).
  //
  // The list of newly created files will be added to |output_files|. As the
  // code signing may depends on the full bundle structure, this step will
  // depends on all files generated via other rules.
  void WriteCodeSigningStep(const std::string& code_signing_rule_name,
                            const std::vector<OutputFile>& order_only_deps,
                            std::vector<OutputFile>* output_files);

  // Writes the stamp file for the code signing input dependencies.
  OutputFile WriteCodeSigningInputDepsStamp(
      const std::vector<OutputFile>& order_only_deps,
      std::vector<OutputFile>* output_files);

  NinjaCreateBundleTargetWriter(const NinjaCreateBundleTargetWriter&) = delete;
  NinjaCreateBundleTargetWriter& operator=(
      const NinjaCreateBundleTargetWriter&) = delete;
};

#endif  // TOOLS_GN_NINJA_CREATE_BUNDLE_TARGET_WRITER_H_
