class Admins::ProjectsRankController < Admins::BaseController
  before_action :require_admin

  def index 
    @statistics = DailyProjectStatistic.where("date >= ? AND date <= ?", begin_date, end_date)
    @statistics = @statistics.group(:project_id).select("project_id, 
                                                         sum(score) as score,
                                                         sum(visits) as visits,
                                                         sum(watchers) as watchers,
                                                         sum(praises) as praises,
                                                         sum(forks) as forks,
                                                         sum(issues) as issues,
                                                         sum(pullrequests) as pullrequests,
                                                         sum(commits) as commits").includes(:project)
    @statistics = paginate @statistics.order("#{sort_by} #{sort_direction}")
    export_excel(@statistics.limit(50))
  end

  private 

  def begin_date 
    params.fetch(:begin_date, (Date.yesterday-7.days).to_s)
  end

  def end_date 
    params.fetch(:end_date, Date.yesterday.to_s)
  end

  def sort_by
    DailyProjectStatistic.column_names.include?(params.fetch(:sort_by, "score")) ? params.fetch(:sort_by, "score") : "score"
  end

  def sort_direction
    %w(desc asc).include?(params.fetch(:sort_direction, "desc")) ? params.fetch(:sort_direction, "desc") : "desc"
  end

  def export_excel(data)
    book = Spreadsheet::Workbook.new 
    sheet = book.create_worksheet :name => "项目活跃度排行"
    sheet.row(0).concat %w(排名 项目全称 项目地址 得分 访问数 关注数 点赞数 fork数 疑修数 合并请求数 提交数)
    data.each_with_index do |d, index|
      sheet[index+1,0] = index+1
      sheet[index+1,1] = "#{d&.project&.owner&.real_name}/#{d&.project&.name}"
      sheet[index+1,2] = "#{Rails.application.config_for(:configuration)['platform_url']}/#{d&.project&.owner&.login}/#{d&.project&.identifier}"
      sheet[index+1,3] = d.score
      sheet[index+1,4] = d.visits
      sheet[index+1,5] = d.watchers
      sheet[index+1,6] = d.praises
      sheet[index+1,7] = d.forks
      sheet[index+1,8] = d.issues
      sheet[index+1,9] = d.pullrequests
      sheet[index+1,10] = d.commits
    end
    book.write "#{Rails.root}/public/项目活跃度排行.xls"
  end

end