# -*- encoding : utf-8 -*-
class ImageFile < ActiveRecord::Base
  include PgSearch
  
  mount_uploader :file, ImageUploader
  #validates :icloud_id #, :uniqueness => true
  belongs_to :album
  
  has_many :image_file_share_images
  has_many :share_images, :through => :image_file_share_images
  
  attr_accessor :origin_n, :skip_tag_caches
  before_save do
    
  end
  
  
	has_many :tag_taggables, :as => :taggable
	has_many :tags, :through => :tag_taggables 



  pg_search_scope :search_by_text, :against => [:name, :description, :photograph, :origin_name, :tags_cache], :using => {
                    :tsearch => {:dictionary  => 'french', :prefix => true, tsvector_column: "tsv_tsearch"},
                    :trigram => {
                      :threshold => 0.1,
                    }
                  },:ignoring => :accents

  



  after_save do
    
    if false
      if self.changes[:album_id]
        self.changes[:album_id].each do |album_id|
        
          Album.find(album_id.to_i).update_image_count if album_id.to_i > 0
        end
      end

      Album.find(self.album_id.to_i).update_image_count if self.album_id.to_i > 0
    
    end
    
    if !self.skip_tag_caches
      self.tags_cache = self.tags.map{ |element| element.name}.join(" , ")
      self.skip_tag_caches = true
      self.save
    end
    
    
  end
  
  
  
  
  def rotate(degrees=90)
    versions = [self.file.path, self.file.large.path, self.file.large.thumb.path]
    
    versions.each do |v|
      image = Magick::ImageList.new(v)
      image = image.rotate(degrees)
      image.write(v)
    end
    
    self.file.recreate_versions!(:secure, :secure_thumb)
    
    
    self.updated_at = Time.now
    self.save
  end

  protected
  def generate_token
    
    if !self.token_s
      begin
        self.token_s = SecureRandom.hex(5)
      end while ImageFile.exists?(:token_s => self.token_s)
      
    end
  end

end
