####by fq
class Bid < ActiveRecord::Base
  #attr_accessible :author_id, :budget, :deadline, :name, :description

  belongs_to :author, :class_name => 'User', :foreign_key => :author_id
  has_many :biding_projects, :dependent => :destroy
  has_many :projects, :through => :biding_projects
  has_many :journals_for_messages, :as => :jour, :dependent => :destroy

  NAME_LENGTH_LIMIT = 60
  DESCRIPTION_LENGTH_LIMIT = 250

  validates_length_of :name, :maximum => NAME_LENGTH_LIMIT
  validates_length_of :description, :maximum => DESCRIPTION_LENGTH_LIMIT
  validates_presence_of :author_id, :name, :deadline
  # validates_format_of :deadline, :with =>
  validate :validate_user
  
  scope :visible, lambda {|*args|
    nil
  }
  
  scope :like, lambda {|arg|
    if arg.blank?
      where(nil)
    else
      pattern = "%#{arg.to_s.strip.downcase}%"
      where("LOWER(identifier) LIKE :p OR LOWER(name) LIKE :p OR LOWER(description) LIKE :p", :p => pattern)
    end
  }

  acts_as_watchable
  acts_as_taggable

  acts_as_event :title => Proc.new {|o| "#{l(:label_requirement)} ##{o.id}: #{o.name}" },
                :description => :description,
                :author => :author,
                :url => Proc.new {|o| {:controller => 'bids', :action => 'show', :id => o.id}}

  acts_as_activity_provider :find_options => {:include => [:author]},
                            :author_key => :author_id
  
  def add_jour(user, notes)
    self.journals_for_messages << JournalsForMessage.new(:user_id => user.id, :notes => notes)
  end

  def self.creat_bids(budget, deadline, name, description=nil)
    self.create(:author_id => User.current.id, :budget => budget,
    :deadline => deadline, :name => name, :description => description, :commit => 0)
  end

  def update_bids(budget, deadline, name, description=nil)
    if(User.current.id == self.author_id)
    self.name = name
    self.budget = budget
    self.deadline = deadline
    self.description = description
    self.save
    end
  end

  def delete_bids
    unless self.nil?
      if User.current.id == self.author_id
      self.destroy
      end
    end
  end

  def set_commit(commit)
    self.update_attribute(:commit, commit)
  end

  private

  def validate_user
    errors.add :author_id, :invalid if author.nil? || !author.active?
  end
end
