desc "统计实践课程的学习统计数据"

namespace :subjects do
  task data_statistic: :environment do
    puts("---------------------data_statistic_begin")
    Rails.logger.info("---------------------data_statistic_begin")
    subjects = Subject.where(status: 2)
    subjects.find_each do |subject|
      puts("---------------------data_statistic: #{subject.id}")
      Rails.logger.info("---------------------data_statistic: #{subject.id}")
      sr = SubjectRecord.find_or_create_by!(subject_id: subject.id)
      data = Subjects::DataStatisticService.new(subject)
      update_params = {
          study_count: data.study_count,
          course_study_count: data.course_study_count,
          initiative_study: data.initiative_study,
          passed_count: data.passed_count,
          course_used_count: data.course_used_count,
          school_used_count: data.school_used_count
      }
      sr.update_attributes!(update_params)
    end
    puts("---------------------data_statistic_end")
    Rails.logger.info("---------------------data_statistic_end")
  end

  task course_info_statistic: :environment do
    puts("---------------------course_info_statistic_begin")
    Rails.logger.info("---------------------course_info_statistic_begin")
    subjects = Subject.where(status: 2)
    subjects.find_each do |subject|
      puts("---------------------course_info_statistic: #{subject.id}")
      Rails.logger.info("---------------------course_info_statistic: #{subject.id}")
      data = Subjects::DataStatisticService.call(subject)
      data.each do |key|
        scr = SubjectCourseRecord.find_or_create_by!(school_id: key[:school_id], subject_id: subject.id)
        update_params = {
            school_name: key[:school_name],
            course_count: key[:course_count],
            student_count: key[:student_count],
            choice_shixun_num: key[:choice_shixun_num],
            choice_shixun_frequency: key[:choice_shixun_frequency]
        }
        scr.update_attributes(update_params)
      end
    end
    puts("---------------------course_info_statistic_end")
    Rails.logger.info("---------------------course_info_statistic_end")
  end

  task shixun_info_statistic: :environment do
    puts("---------------------shixun_info_statistic_begin")
    Rails.logger.info("---------------------shixun_info_statistic_begin")
    subjects = Subject.where(status: 2)
    subjects.find_each(batch_size: 100) do |subject|
      data = Subjects::ShixunUsedInfoService.call(subject)
      data.each do |key|
        ssi = SubjectShixunInfo.find_or_create_by!(shixun_id: key[:shixun_id], subject_id: subject.id)
        update_params = {
            stage: key[:stage],
            shixun_name: key[:name],
            challenge_count: key[:challenge_count],
            course_count: key[:course_count],
            school_count: key[:school_count],
            used_count: key[:used_count],
            passed_count: key[:passed_count],
            evaluate_count: key[:evaluate_count],
            passed_ave_time: key[:passed_ave_time]
        }
        ssi.update_attributes(update_params)
      end
    end
    puts("---------------------shixun_info_statistic_end")
    Rails.logger.info("---------------------shixun_info_statistic_end")
  end

  task user_info_statistic: :environment do
    puts("---------------------user_info_statistic_begin")
    Rails.logger.info("---------------------user_info_statistic_begin")
    subjects = Subject.where(status: 2)
    subjects.find_each(batch_size: 100) do |subject|
      puts("---------------------user_info_statistic: #{subject.id}")
      data = Subjects::UserUsedInfoService.call(subject)
      data.each do |key|
        sui = SubjectUserInfo.find_or_create_by!(user_id: key[:user_id], subject_id: subject.id)
        update_params = {
            username: key[:name],
            passed_myshixun_count: key[:passed_myshixun_count],
            passed_games_count: key[:passed_games_count],
            code_line_count: key[:code_line_count],
            evaluate_count: key[:evaluate_count],
            cost_time: key[:cost_time]
        }
        sui.update_attributes(update_params)
      end
    end
    puts("---------------------user_info_statistic_end")
    Rails.logger.info("---------------------user_info_statistic_end")
  end



  end