class {{ formula_class }} < Formula
  desc "{{ desc }}"
  {%- if homepage %}
  homepage "{{ homepage }}"
  {%- endif %}
  version "{{ inner.app_version }}"

  {#- note: this is a jinja2 macro: <https://jinja.palletsprojects.com/en/stable/templates/#macros>  #}
  {%- macro fragment_url_and_hash(frag, cond) %}
  {%- if frag %}
    {%- if cond is defined %}
    if {{ cond }}
      url "{{ inner.base_url }}/{{ frag.id }}"
      {%- if frag.sha256 %}
      sha256 "{{ frag.sha256 }}"
      {%- endif %}
    end
    {%- else %}
    url "{{ inner.base_url }}/{{ frag.id }}"
    {%- if frag.sha256 %}
    sha256 "{{ frag.sha256 }}"
    {%- endif %}
    {%- endif %}
  {%- endif %}
  {%- endmacro %}

  {%- if arm64_macos or x86_64_macos %}
  if OS.mac?
  {%- if arm64_macos and x86_64_macos and arm64_macos.id == x86_64_macos.id %}
    {{- fragment_url_and_hash(arm64_macos) }}
  {%- else %}
    {{- fragment_url_and_hash(arm64_macos, "Hardware::CPU.arm?") }}
    {{- fragment_url_and_hash(x86_64_macos, "Hardware::CPU.intel?") }}
  {%- endif %}
  end
  {%- endif %}
  {%- if arm64_linux or x86_64_linux %}
  if OS.linux?
  {%- if arm64_linux and x86_64_linux and arm64_linux.id == x86_64_linux.id %}
    {{- fragment_url_and_hash(arm64_linux) }}
  {%- else %}
    {{- fragment_url_and_hash(arm64_linux, "Hardware::CPU.arm?") }}
    {{- fragment_url_and_hash(x86_64_linux, "Hardware::CPU.intel?") }}
  {%- endif %}
  end
  {%- endif %}

  {%- if license %}
  license {{ license }}
  {%- endif -%}
  {% for dep in dependencies %}
  depends_on "{{ dep }}"
  {%- endfor %}

  BINARY_ALIASES = {{ inner.bin_aliases | tojson(indent=2) | indent(2) }}

  def target_triple
    cpu = Hardware::CPU.arm? ? "aarch64" : "x86_64"
    os = OS.mac? ? "apple-darwin" : "unknown-linux-gnu"

    "#{cpu}-#{os}"
  end

  def install_binary_aliases!
    BINARY_ALIASES[target_triple.to_sym].each do |source, dests|
      dests.each do |dest|
        bin.install_symlink bin/source.to_s => dest
      end
    end
  end

  def install
    {%- macro install_fragment(frag, cond) %}
    {%- if frag %}
    if {{ cond }}
      {%- if frag.executables %}
      bin.install {% for binary in frag.executables %}"{{ binary }}"{{ ", " if not loop.last else "" }}{% endfor %}
      {%- endif %}
      {%- if frag.cdylibs and "cdylib" in install_libraries %}
      lib.install {% for library in frag.cdylibs %}"{{ library }}"{{ ", " if not loop.last else "" }}{% endfor %}
      {%- endif %}
      {%- if frag.cstaticlibs and "cstaticlib" in install_libraries %}
      lib.install {% for library in frag.cstaticlibs %}"{{ library }}"{{ ", " if not loop.last else "" }}{% endfor %}
      {%- endif %}
    end
    {%- endif %}
    {%- endmacro %}
    {{- install_fragment(arm64_macos, "OS.mac? && Hardware::CPU.arm?") }}
    {{- install_fragment(x86_64_macos, "OS.mac? && Hardware::CPU.intel?") }}
    {{- install_fragment(arm64_linux, "OS.linux? && Hardware::CPU.arm?") }}
    {{- install_fragment(x86_64_linux, "OS.linux? && Hardware::CPU.intel?") }}

    install_binary_aliases!

    # Homebrew will automatically install these, so we don't need to do that
    doc_files = Dir["README.*", "readme.*", "LICENSE", "LICENSE.*", "CHANGELOG.*"]
    leftover_contents = Dir["*"] - doc_files

    # Install any leftover files in pkgshare; these are probably config or
    # sample files.
    pkgshare.install(*leftover_contents) unless leftover_contents.empty?
  end
end