#coding=utf-8
# 执行示例  bundle exec rake public_course:student args=149,2903
# args 第一个参数是subject_id，第二个参数是课程course_id
# 第一期时间：2018-12-16 至2019-03-31
# 第二期时间：2019-04-07 至2019-07-28
#
# 这次学习很有收获，感谢老师提供这么好的资源和细心的服务🎉🎉🎉
#

desc "同步精品课数据"
namespace :public_course do
  if ENV['args']
    subject_id = ENV['args'].split(",")[0] # 对应课程的id
    course_id = ENV['args'].split(",")[1] # 对应课堂的id
    status = ENV['args'].split(",")[2] # 表示相应的期数
    type = ENV['args'].split(",")[3] # 表示课程模块
  end


  if status.to_i == 1
    start_time = '2018-12-16'
    end_time = '2019-04-01'
  elsif status.to_i == 2
    start_time = '2019-04-07'
    end_time = '2019-07-28'
  else
    # 这种情况是取所有的
    start_time = '2015-01-01'
    end_time = '2022-07-28'
  end

  task :student => :environment do
    puts "subject_id is #{subject_id}"
    puts "course_id is #{course_id}"

    user_ids = Myshixun.find_by_sql("select distinct(user_id) from myshixuns where shixun_id in (select shixun_id from stage_shixuns
                                     where stage_id in (select id from stages where subject_id=#{subject_id}))").map(&:user_id)
    puts user_ids
    if user_ids.present?
      user_ids.each do |user_id|
        puts user_id
        begin
          CourseMember.create!(course_id: course_id, user_id: user_id, role: 4)
        rescue Exception => e
          Rails.logger(e.message)
        end
      end
    end
  end

  task :test_user => :environment do
    users = User.where(is_test: true)
    users.find_each do |user|
      puts user.id
      CourseMember.create!(course_id: course_id, user_id: user.id, role: 4)
    end
  end


  # 更新某个课程的某类时间
  # 执行示例  RAILS_ENV=production bundle exec rake public_course:time args=-1,2932,1,1
  task :time => :environment do
    # course_id = ENV['args'].split(",")[0] # 对应课堂的id
    # type = ENV['args'].split(",")[1]

    course = Course.find(course_id)

    case type.to_i
    when 1
      # 讨论区
      messages = Message.where(board_id: course.boards)
      messages.each do |message|
        created_on = random_time start_time, end_time
        puts created_on
        message.update_columns(created_on: created_on, updated_on: created_on)
        MessageDetail.where(message_id: message.id).each do |detail|
          rand_created_on = random_time start_time, end_time
          detail.update_columns(created_at: rand_created_on, updated_at: rand_created_on)
        end
      end
    when 2
      # 作业
      course.homework_commons.each do |homework|
        created_at = random_time(start_time, end_time)
        publish_time = random_larger_time created_at, start_time, end_time
        end_time = random_larger_time publish_time, start_time, end_time
        updated_at = end_time

        homework.update_columns(publish_time: publish_time, end_time: end_time, created_at: created_at, updated_at: updated_at)
        homework.homework_detail_manual.update_columns(comment_status: 6, created_at: created_at, updated_at: updated_at)

        homework.student_works.where("work_status !=0 and update_time > '#{end_time}'").update_all(update_time: end_time)
      end
    when 3
      # 试卷
      course.exercises.each do |exercise|
        created_at = random_time start_time, end_time
        publish_time = random_larger_time created_at, start_time, end_time
        end_time = random_larger_time publish_time, start_time, end_time
        updated_at = end_time

        exercise.update_columns(publish_time: publish_time, end_time: end_time, created_at: created_at, updated_at: updated_at, exercise_status: 3)
      end
    when 4
      # 资源
      course.attachments.each do |atta|
        created_on = random_time start_time, end_time

        atta.update_columns(is_publish: 1, created_on: created_on, publish_time: created_on)
      end
    end

  end

  task :create_homework_work => :environment do
    course = Course.find(course_id)
    course.practice_homeworks.each do |homework|
      if homework.student_works.count == 0
        str = ""
        CourseMember.students(course).each do |student|
          str += "," if str != ""
          str += "(#{homework.id},#{student.user_id}, '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}', '#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}')"
        end
        if str != ""
          sql = "insert into student_works (homework_common_id, user_id, created_at, updated_at) values" + str
          ActiveRecord::Base.connection.execute sql
        end
      end
    end
  end

  def min_swith(time)
    puts time
    return time < 9 ? "0#{time}" : time
  end

  def random_time(start_time, end_time)
    hour = (6..23).to_a.sample(1).first
    min = rand(60)
    sec = rand(60)

    start_time = Date.parse(start_time)
    end_time = Date.parse(end_time)
    date = (start_time..end_time).to_a.sample(1).first

    time = "#{date} #{min_swith(hour)}:#{min_swith(min)}:#{min_swith(sec)}"

    puts time
    time
  end

  def random_larger_time(time, start_time, end_time)
    large_time = random_time(start_time, end_time)
    while large_time <= time
      large_time = random_time(start_time, end_time)
    end
    large_time
  end
end