# frozen_string_literal: true

require 'tempfile' require 'json' require 'active_support/core_ext/hash' require 'rake' require_relative '../deprecation_toolkit/read_write_helper'

class CIRecorder

include Rake::DSL
include DeprecationToolkit::ReadWriteHelper

def initialize
  namespace :deprecation_toolkit do
    desc 'Parse a file generated with the CIOutputHelper and generate deprecations out of it'
    task :record_from_ci_output do
      raw_file = ENV.fetch('FILEPATH')

      deprecations = extract_deprecations_output(raw_file) do |file|
        parse_file(file)
      end

      generate_deprecations_file(deprecations)
    end
  end
end

private

def extract_deprecations_output(file)
  tmp_file = Tempfile.new
  shell_command = "cat #{file} | sed -n -e 's/^.* \\[DeprecationToolkit\\] \\(.*\\)/\\1/p' > #{tmp_file.path}"

  raise "Couldn't extract deprecations from output" unless system(shell_command)
  yield(tmp_file)
ensure
  tmp_file.delete
end

def parse_file(file)
  file.each.with_object({}) do |line, hash|
    hash.deep_merge!(JSON.parse(line))
  end
end

def generate_deprecations_file(deprecations_to_record)
  deprecations_to_record.each do |filename, deprecations|
    write(Pathname(filename), deprecations)
  end
end

end

CIRecorder.new