class Videos::BatchPublishService < ApplicationService
  Error = Class.new(StandardError)

  attr_reader :user, :params

  def initialize(user, params)
    @user   = user
    @params = params
  end

  def call
    video_params = Array.wrap(params[:videos]).compact
    return if video_params.blank?
    Rails.logger.info("#####video_course: #{video_params}")

    video_ids = []
    ActiveRecord::Base.transaction do
      video_params.each do |param|
        video = user.videos.find_by(uuid: param[:video_id])
        Rails.logger.info("video.processing_video_apply:#{video}")
        Rails.logger.info("video.processing_video_apply:#{video.blank? || video.processing_video_apply}")
        next if video.blank? || video.processing_video_apply.present?

        raise Error, '视频还未上传完成' if video.vod_uploading?

        video.title = param[:title].to_s.strip.presence || video.title
        video.apply_publish
        if param[:course_id].present?
          video.status = "published"
        end
        video.save!

        if param[:course_id].present?
          video.video_applies.create!(status: "agreed")
        else
          video.video_applies.create!
        end

        video_ids << video.id

        # 如果是课堂上传则创建课堂记录
        Rails.logger.info("#####param: #{ param[:course_id]}")
        if param[:course_id].present?
          video.course_videos.create!(course_id: param[:course_id])
        end
      end
    end

    BatchPublishVideoNotifyJob.perform_later(user.id, video_ids) if video_ids.present?
  end
end