class SoftapplicationsController < ApplicationController
  layout "contest_base"
  before_filter :find_softapplication, only: [:edit, :update, :destroy]
  before_filter :editable, only: [:edit, :update]
  before_filter :destroyable, only: :destroy

  # GET /softapplications
  # GET /softapplications.json
  def index
    @softapplications = Softapplication.all

    #new added fenyefunction
    @limit = 5
    @softapplication_count = @softapplications.count
    @softapplication_pages = Paginator.new @softapplication_count, @limit, params['page']  
    @offset ||= @softapplication_pages.offset
    #@softapplications = @softapplications[@offset,@limit]
    #new added end

    #new added sort
    if params[:softapplication_sort_type].present?
      case params[:softapplication_sort_type]
      when '0'
        @softapplications = @softapplications[@offset, @limit]
        @s_state = 0
      when '1'
        @softapplications = @softapplications.sort { |x, y| y[:created_at] <=> x[:created_at]}[@offset, @limit]
        @s_state = 1
      end
    else
      @softapplications = @softapplications.sort { |x, y| y[:created_at] <=> x[:created_at]}[@offset, @limit]
      @s_state = 1
    end    
    #new added end

    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @softapplications }
    end
  end

  # GET /softapplications/1
  # GET /softapplications/1.json

  def percent_of(num, percent)
    num.to_f / percent.to_f * 100.0
  end

  def show
    @softapplication = Softapplication.find(params[:id])
    #@project = @softapplication.project
    # 打分统计
    stars_reates = @softapplication.
                    rates(:quality)
    stars_reates_count = stars_reates.count == 0 ? 1 : stars_reates.count
    stars_status = stars_reates.select("stars, count(*) as scount").
                    group("stars")
    
    @stars_status_map = Hash.new(0)
    stars_status.each do |star_status|
      percent = percent_of(star_status.scount, stars_reates_count).to_f
      people = star_status.scount.to_i
      @stars_status_map["star#{star_status.stars.to_i}".to_sym] = 
        people.to_s
    end
    @jours = @softapplication.journals_for_messages.order('created_on DESC')
    @image_results = []
    @softapplication.attachments.each do |f|
    f.image? ? @image_results << f : @image_results
    end
    @app_items = []
    @softapplication.attachments.each do |f|
    f.pack? ? @app_items << f : @app_items
    end
    @limit =  10
    @feedback_count = @jours.count
    @feedback_pages = Paginator.new @feedback_count, @limit, params['page']
    @offset ||= @feedback_pages.offset
    @jour = @jours[@offset, @limit]
    @state = false
    respond_to do |format|
      format.html # show.html.erb
      format.json { render json: @softapplication }
    end
  end

  # GET /softapplications/new
  # GET /softapplications/new.json
  def new
    @softapplication = Softapplication.new
    
    #添加当前用户创建过的项目作为托管项目(下拉项目列表)
    project = Project.find(params[:user_id])
    #end
    
    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @softapplication }
    end
  end

  # GET /softapplications/1/edit
  def edit
    @softapplication = Softapplication.find(params[:id])
    
    @membership = User.current.memberships.all(:conditions => Project.visible_condition(User.current))
    @option = []
    # @contesting_project_count = @contesting_project_all.count
    # @contesting_project_pages = Paginator.new @contesting_project_count, per_page_option, params['page']
    @membership.each do |membership|
      unless(membership.project.project_type==1)
        #拥有编辑项目权限的可操作该项目
        if User.current.allowed_to?(:quote_project,membership.project)
          @option << membership.project
        end
      end
    end
    
  end

  # POST /softapplications
  # POST /softapplications.json
  # def create
    # @softapplication = Softapplication.new(params[:softapplication])
    # @softapplication.user = User.current
    # @softapplication.save_attachments(params[:attachments])
    # respond_to do |format|
      # if @softapplication.save
        # format.js 
        # format.html { redirect_to @softapplication, notice: 'Softapplication was successfully created.' }
        # # format.json { render json: @softapplication, status: :created, location: @softapplication }
      # else
        # format.js { render status: 406 }
        # format.html { render action: "new" }
        # # format.json { render json: @softapplication.errors, status: :unprocessable_entity }
      # end
    # end
  # end


#new changed created function
  def create
    #options = params[:softapplication]
    #options[:app_type_name] = params[:other_input] if options[:app_type_name] == "其他" && params[:other_input]
    @softapplication = Softapplication.new(params[:softapplication])
    @softapplication.user = User.current
    #@softapplication.deposit_project = params[:project]
    @softapplication.project = Project.find_by_id(params[:project])
    @softapplication.app_type_name = params[:other_input] if  params[:other_input] != ""
    @softapplication.save_attachments(params[:attachments])
    respond_to do |format|
      if @softapplication.save
        ContestingSoftapplication.create(:contest_id => params[:contest_id], :softapplication_id => @softapplication.id)
        #ProjectingSoftapplication.create_softapplication_projecting(:project_id => params[:project_id], :softapplication_id => @softapplication.id)
        #ProjectingSoftapplication.create_softapplication_projecting(@project.id, softapplication.id)        
        format.html { redirect_to show_attendingcontest_contest_url(:id => params[:contest_id]), notice: l(:notice_attendingcontest_work_successfully_created) }
        # format.json { render json: @softapplication, status: :created, location: @softapplication }
      else
        #format.js { render status: 406 }
        format.html { render action: "contests/show_attendingcontest" }
        # format.json { render json: @softapplication.errors, status: :unprocessable_entity }
      end
    end
    #关联新建的参赛作品
  
    # @contesting_softapplication = paginateHelper @contest.contesting_softapplications
    
    
    
  end
  # PUT /softapplications/1
  # PUT /softapplications/1.json
  def update
    # @softapplication = Softapplication.find(params[:id])
    #@softapplication.attachments.map{|attach| attach.destroy }
    @softapplication.save_attachments(params[:attachments]) if params[:attachments]
    #@softapplication.deposit_project = params[:project]
    @softapplication.project = Project.find_by_id(params[:project])

    @softapplication.name = params[:softapplication][:name]
    @softapplication.android_min_version_available = params[:softapplication][:android_min_version_available]
    @softapplication.app_type_name = params[:other_input] == "" ? params[:softapplication][:app_type_name] : params[:other_input]
    @softapplication.description = params[:softapplication][:description]
    @softapplication.application_developers = params[:softapplication][:application_developers]
    #@softapplication.app_type_name = params[:other_input] if  params[:other_input] != ""
    respond_to do |format|
      #if @softapplication.update_attributes(params[:softapplication])
      if @softapplication.save
        format.html { redirect_to @softapplication, notice: l(:notice_softapplication_was_successfully_updated) }
        format.json { head :no_content }
      else
        format.html { render action: "edit" }
        format.json { render json: @softapplication.errors, status: :unprocessable_entity }
      end
    end
  end

  def add_attach
    @softapplication = Softapplication.find(params[:id])
    @softapplication.save_attachments(params[:attachments])
  end

  # DELETE /softapplications/1
  # DELETE /softapplications/1.json
  def destroy
    # @softapplication = Softapplication.find(params[:id])
    @softapplication.destroy

    respond_to do |format|
      format.html { redirect_to signin_path }
      format.json { head :no_content }
    end
  end

  #应用评价涉及到的方法
  def new_message
    @jour = JournalsForMessage.find(params[:journal_id]) if params[:journal_id]
    if @jour
      user = @jour.user
      text = @jour.notes
    else
      user = @softapplication.user
      text = @softapplication.description
    end
    text = text.to_s.strip.gsub(%r{<pre>((.|\s)*?)</pre>}m, '[...]')
    @content = "> #{ll(User.current.language, :text_user_wrote, user)}\n> "
    @content << text.gsub(/(\r?\n|\r\n?)/, "\n> ") + "\n\n"
    @id = user.id
  rescue ActiveRecord::RecordNotFound
    render_404
  end

  #新建评价
  def create_message

    if params[:reference_content]
        message = params[:softapplication_message][:message] + "\n" + params[:reference_content]
    else
        message = params[:softapplication_message][:message]
    end
    refer_user_id = params[:softapplication_message][:reference_user_id].to_i
    @softapplication = Softapplication.find(params[:id])
    @softapplication.add_jour(User.current, message, refer_user_id)


    @user = @softapplication.user
    @jours = @softapplication.journals_for_messages.where('m_parent_id IS NULL').order('created_on DESC')

    @limit =  10
    @feedback_count = @jours.count
    @feedback_pages = Paginator.new @feedback_count, @limit, params['page']
    @offset ||= @feedback_pages.offset
    @jour = @jours[@offset, @limit]
    #@softapplication.set_commit(@feedback_count)

    respond_to do |format|
      format.js
    end

  end

  ##删除评价
  def destroy_message
    @user = @softapplication.user
    if User.current.admin? || User.current.id == @user.id
      JournalsForMessage.delete_message(params[:object_id])
    end
    @jours = @softapplication.journals_for_messages.reverse
    @limit =  10
    @feedback_count = @jours.count
    @feedback_pages = Paginator.new @feedback_count, @limit, params['page']
    @offset ||= @feedback_pages.offset
    @jour = @jours[@offset, @limit]

    @softapplication.set_commit(@feedback_count)
    respond_to do |format|
      format.js
    end
  end

  #
  def more
    @jour = @softapplication.journals_for_messages
    @jour.each_with_index {|j,i| j.indice = i+1}
    @state = true

    respond_to do |format|
      format.html { redirect_to :back }
      format.js
    #format.api { render_api_ok }
    end
  end

  #
  def back
    @jour = @softapplication.journals_for_messages
    @jour.each_with_index {|j,i| j.indice = i+1}
    @state = false

    respond_to do |format|
      format.html { redirect_to :back }
      format.js
    #format.api { render_api_ok }
    end
  end

  def search
    @softapplications = Softapplication.where("name like '%#{params[:name]}%'")

    #new added fenyefunction
    @limit = 5
    @softapplication_count = @softapplications.count
    @softapplication_pages = Paginator.new @softapplication_count, @limit, params['page']
    @offset ||= @softapplication_pages.offset

    #new added sort
    if params[:softapplication_sort_type].present?
      case params[:softapplication_sort_type]
        when '0'
          @softapplications = @softapplications[@offset, @limit]
          @s_state = 0
        when '1'
          @softapplications = @softapplications.sort { |x, y| y[:created_at] <=> x[:created_at]}[@offset, @limit]
          @s_state = 1
      end
    else
      @softapplications = @softapplications.sort { |x, y| y[:created_at] <=> x[:created_at]}[@offset, @limit]
      @s_state = 1
    end
    #new added end

    respond_to do |format|
      format.html
    end
  end

  private 
  def find_softapplication
    @softapplication = Softapplication.find_by_id(params[:id])
  end

  def editable
    unless @softapplication.editable_by? User.current
      render_403
      return false
    end
  end

  def destroyable
    unless @softapplication.destroyable_by? User.current
      render_403
      return false
    end
  end 

end
