# frozen_string_literal: true
# extensions/naturalshop/active_storage/vip_optimization_extension.rb

module Naturalshop
  module ActiveStorage
    module VipsOptimizationExtension
      def initialize(transformations)
        transformations = transformations.deep_dup

        # Saver options for png: https://www.rubydoc.info/gems/ruby-vips/Vips/Image#pngsave-instance_method
        if transformations[:format].to_s == "png" ||
           transformations.dig(:saver, :palette) ||
           transformations.dig(:saver, :Q)
          transformations[:saver] ||= {}
          transformations[:saver].reverse_merge!(
            palette: true,
            Q: 256,
            compression: 9,
            strip: true,
            dither: 0.5
          )
        # Saver options for jpg: https://www.rubydoc.info/gems/ruby-vips/Vips/Image#jpegsave-instance_method
        elsif transformations[:format].to_s.in?(["jpg", "jpeg"])
          transformations[:saver] ||= {}
          transformations[:saver].reverse_merge!(
            quality: 65,
            # Strip only mentioned here. Not sure if it works but does any error. 
            # https://www.rubydoc.info/gems/ruby-vips/Vips%2FImage:write_to_buffer
            strip: true, 
            optimize_coding: true
          )
        end

        super(transformations)
      end
    end
  end
end

ActiveStorage::Variation.prepend(Naturalshop::ActiveStorage::VipsOptimizationExtension)
