require "json"
require "pathname"

groonga_repository = ENV["GROONGA_REPOSITORY"]
if groonga_repository.nil?
  raise "Specify GROONGA_REPOSITORY environment variable"
end
require "#{groonga_repository}/packages/packages-groonga-org-package-task"

class GroongaNormalizerMySQLPackageTask < PackagesGroongaOrgPackageTask
  def initialize
    super("groonga-normalizer-mysql", detect_version, detect_release_time)
  end

  private
  def top_directory
    packages_directory.parent
  end

  def packages_directory
    Pathname(__dir__)
  end

  def detect_version
    ENV["VERSION"] ||
      (top_directory + "CMakeLists.txt").read[/VERSION "(.*?)"/, 1]
  end

  def detect_required_groonga_version
    (top_directory + "required_groonga_version").read.chomp
  end

  def original_archive_path
    top_directory + @archive_name
  end

  def define_archive_task
    file "../#{@archive_name}" do
      source_archive_url = built_package_url(:source, @archive_name)
      download(source_archive_url, "..")
    end

    file @archive_name => "../#{@archive_name}" do
      ln_s("../#{@archive_name}", @archive_name)
    end
  end

  def apt_targets_default
    [
      "debian-bookworm",
      "debian-bookworm-arm64",
    ]
  end

  def yum_targets_default
    [
      "almalinux-8",
      "almalinux-8-aarch64",
      "almalinux-9",
      "almalinux-9-aarch64",
      "amazon-linux-2023",
      "amazon-linux-2023-aarch64",
    ]
  end

  def yum_expand_variable(key)
    case key
    when "REQUIRED_GROONGA_VERSION"
      detect_required_groonga_version
    else
      super
    end
  end

  def source_targets_default
    [
      "#{@archive_base_name}.tar.gz",
      "#{@archive_base_name}.zip",
    ]
  end

  def use_built_package?
    true
  end

  def github_repository
    "groonga/groonga-normalizer-mysql"
  end

  def github_actions_workflow_file_name(target_namespace, target)
    case target_namespace
    when :apt, :yum
      "package.yml"
    else
      super
    end
  end

  def github_actions_artifact_name(target_namespace, target)
    case target_namespace
    when :apt
      if target.end_with?("-i386") or target.end_with?("-arm64")
        "packages-#{target}"
      else
        "packages-#{target}-amd64"
      end
    when :yum
      "packages-#{target}"
    when :source
      target
    else
      raise NotImplementedError
    end
  end

  def built_package_url(target_namespace, target)
    url = "https://github.com/groonga/groonga-normalizer-mysql/releases/download/v#{@version}/"
    case target_namespace
    when :apt
      if target.end_with?("-i386") or target.end_with?("-arm64")
        url << "#{target}.tar.gz"
      else
        url << "#{target}-amd64.tar.gz"
      end
    when :yum
      url << "#{target}.tar.gz"
    else
      url << "#{target}"
    end
    url
  end

  def built_package_n_split_components
    3
  end

  def tag_name
    "v#{@version}"
  end
end

task = GroongaNormalizerMySQLPackageTask.new
task.define
