namespace :video do
  desc "get video play data"
  task :data => :environment do
    start_times = ['2019-08-19 00:00:00', '2019-11-10 00:00:00']
    end_times = ['2019-11-09 23:59:59', '2020-02-06 00:00:00']

    Video.all.each do |video|
      vv = 0
      play_duration = 0

      start_times.each_with_index do |time, index|
        start_time = time.to_time.utc.strftime('%Y-%m-%dT%H:%M:%SZ')
        end_time = end_times[index].to_time.utc.strftime('%Y-%m-%dT%H:%M:%SZ')

        data = AliyunVod::Service.video_data(video.uuid, start_time, end_time)

        puts data
        if data[:VideoPlayStatisDetails].present?
          sum_duration = data[:VideoPlayStatisDetails][:VideoPlayStatisDetail].map(&:PlayDuration).sum
          sum_vv = data[:VideoPlayStatisDetails][:VideoPlayStatisDetail].map(&:vv).sum

          vv += sum_vv
          play_duration += sum_duration
        end
      end

      video.update!(vv: vv, play_duration: play_duration)
      puts video.id
    end
  end

  desc "将http修改成http"
  task modify_http_to_https_file_url: :environment do
    p "s"
    if ENV['args']
      course_id = ENV['args'].split(",")[0]
      video_ids = CourseVideo.where(course_id: course_id).pluck(:video_id)
      videos = Video.where(id: video_ids)
      if videos
        videos.each do |v|
          if v.file_url
            file_url = v.file_url.gsub("http:", "https:")
            v.update_column(:file_url, file_url)
          end
        end
      end
    end
  end

  # 执行示例  bundle exec rake video:sample args=2933,'2019-08-19 00:00:00','2019-11-09 23:59:59'
  task :sample => :environment do
    if ENV['args']
      video_id = ENV['args'].split(",")[0]
      start_time = ENV['args'].split(",")[1].to_s.to_time.utc.iso8601 # 表示开始时间
      end_time = ENV['args'].split(",")[2].to_s.to_time.utc.iso8601 # 表示结束时间

      video=Video.find video_id
      data = AliyunVod::Service.video_data(video.uuid, start_time, end_time)

      puts data
    end
  end

  task :get_play_url => :environment do
    Video.where(play_url: nil).each do |video|
      result = AliyunVod::Service.get_play_info(video.uuid) rescue nil
      if result.present? && result["PlayInfoList"]["PlayInfo"].present?
        puts result
        play_url = result["PlayInfoList"]["PlayInfo"].first["PlayURL"]
        puts play_url
        # play_url  = (result.dig('PlayInfoList', 'PlayInfo') || []).first&.[]('PlayURL')

        video.update!(play_url: play_url) if play_url.present?
      end
    end
  end


  task :set_duration => :environment do
    videos = Video.published.where("duration = 0")
    videos.find_each do |v|
      result = AliyunVod::Service.get_play_info(v.uuid)
      if result.present? && result['PlayInfoList']['PlayInfo'][0]['Duration'].present?
        p "-----#{v.id} , #{result['PlayInfoList']['PlayInfo'][0]['Duration']}"
        v.update(duration: result['PlayInfoList']['PlayInfo'][0]['Duration'])
      end
    end
    
  end
end