# -*- encoding : utf-8 -*-

class ImageUploader < CarrierWave::Uploader::Base

  # Include RMagick or ImageScience support:
  include CarrierWave::RMagick
  # include CarrierWave::ImageScience

  # Choose what kind of storage to use for this uploader:
  storage :file
  # storage :s3

  # Override the directory where uploaded files will be stored.
  # This is a sensible default for uploaders that are meant to be mounted:
  def store_dir
    "public_medias/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
  end

  # Provide a default URL as a default if there hasn't been a file uploaded:
  # def default_url
  #   "/images/fallback/" + [version_name, "default.png"].compact.join('_')
  # end

  # Process files as they are uploaded:
  process :resize_to_limit => [1200, 1200]
  #
  # def scale(width, height)
  #   # do something
  # end






  # Create different versions of your uploaded files:
  version :large do
    process :resize_to_limit => [1200, 1200]
    
    
    version :medium do
      process :resize_to_limit => [800, 700]
      
      version :small do
        process :resize_to_limit => [300, 400]
      
        version :thumb do
          process :resize_to_limit => [250, 250]
        end
      
      end
      
      
    end
    
    
    
    
    
  end

  version :square do
    process :resize_to_fill => [250, 250]
  end
  
  version :secure do
    process :resize_to_limit => [1000, 800]
    #process :convert => 'png'
    process :watermark

    def store_dir
      "public_medias/secure/#{model.id}"
    end
    
    def filename
        "#{model.token_s}.#{file.extension}"# if original_filename.present?
      end
      
      def full_filename (for_file = model.file.file) 
           "secure_#{model.token_s}"+File.extname(for_file).to_s
          end 
    
  end
  
  version :secure_thumb do
    process :resize_to_fit => [250, 300]

    def store_dir
      "public_medias/secure/#{model.id}"
    end
    
    def filename
        "#{model.token_s}.#{file.extension}" if original_filename.present?
      end
      
      def full_filename (for_file = model.file.file) 
           "secure_thumb_#{model.token_s}"+File.extname(for_file).to_s
          end 
    
  end
  
  version :square_secure_thumb do
    process :resize_to_fill => [250, 250]

    def store_dir
      "public_medias/secure/#{model.id}"
    end
    
    def filename
        "#{model.token_s}.#{file.extension}" if original_filename.present?
      end
      
      def full_filename (for_file = model.file.file) 
           "square_secure_thumb_#{model.token_s}"+File.extname(for_file).to_s
          end 
    
  end
  
  def watermark
    manipulate! do |img|
      logo = Magick::Image.read("#{Rails.root}/watermark.png").first
      puts img.rows
      puts img.columns
      #watermark = logo.resize_to_fit(img.columns * 0.4, img.rows * 0.25)
      if img.columns >= 1000 or img.rows >= 800
        watermark = logo.resize_to_fit(220, 220)
      else
        watermark = logo.resize_to_fit(img.columns * 0.4, img.rows * 0.25)
      end
      
      
      
      
      #img = img.composite(watermark, Magick::SouthEastGravity, (watermark.columns*-0.4), 10, Magick::OverCompositeOp)
      img = img.composite(watermark, Magick::SouthWestGravity,Magick::OverCompositeOp)
      
      
      #img = img.dissolve(watermark, 0.4, 1, Magick::CenterGravity)
      #img = img.watermark(watermark, 0.1,0.1, Magick::CenterGravity)
    end
  end
  
  

  # Add a white list of extensions which are allowed to be uploaded.
  # For images you might use something like this:
  def extension_white_list
     %w(jpg jpeg gif png bmp)
  end

  # Override the filename of the uploaded files:
  def filename
      "#{secure_token}.#{file.extension}" if original_filename.present?
    end
  
  
  before :cache, :save_original_filename
  def save_original_filename(file)
    if !model.origin_name?
      puts file.original_filename
      model.origin_name = file.original_filename if file.original_filename.present?
    end
  end
  
  protected
    def secure_token
      var = :"@#{mounted_as}_secure_token"
      model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.hex(4))
    end

end
