module UninterlacePngConcern
  extend ActiveSupport::Concern

  private

  def uninterlace_png(uploaded_file)
    if uploaded_file&.content_type == 'image/png' && interlaced?(uploaded_file.tempfile.to_path)
      chunky_img = ChunkyPNG::Image.from_io(uploaded_file.to_io)
      chunky_img.save(uploaded_file.tempfile.to_path, interlace: false)
      uploaded_file.tempfile.reopen(uploaded_file.tempfile.to_path, 'rb')
    end
    uploaded_file
  end

  def interlaced?(png_path)
    png = MiniMagick::Image.open(png_path)
    png.data["interlace"] != "None"
  end
end