module IdCard
  class EmployerLogo < ApplicationRecord
    belongs_to :setup, optional: true
    validates :filename, :image_data, :content_type, :aspect_ratio, presence: true
    validates :filename, uniqueness: true

    before_validation :process_image, if: :image_data_changed?

    private

    def process_image
      image = Vips::Image.new_from_buffer(self.image_data, "")

      resized_image = ImageProcessing::Vips
      .source(image)
      .resize_to_limit(nil, 400)

      processed_image = resized_image.convert("png").call
      new_image_data = processed_image.read
      if new_image_data
        self.image_data = new_image_data
        self.filename = File.basename(self.filename, File.extname(self.filename)) + ".png"
        self.content_type = "image/png"
      end
      
      image_ratio = image.width.to_f / image.height
      if image_ratio
        self.aspect_ratio = image_ratio.round(2)
      end
    end

  end
end
