desc "同步天府学院数据， 执行顺序依次 import_teaches、 import_courses、 import_students、import_course_members"

namespace :tfxy do

  xlsx = Roo::Spreadsheet.open(Rails.root.join("excel_template/tfxy.xlsx").to_s)

  task import_teaches: :environment do
    desc "同步天府学院老师数据"
    # xlsx = Roo::Spreadsheet.open(Rails.root.join("excel_template/tfxy.xlsx").to_s)

    school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
      d.province = '四川省'
      d.city = '成都'
    end

    #导入教师用户
    teach_data = xlsx.sheet(3)
    teach_data_last_row = teach_data.last_row

    2.upto(teach_data_last_row) do |r|

      if teach_data.cell(r, 6).to_s&.strip.present?
        old_user = User.where("phone = '#{teach_data.cell(r, 5)}' OR mail = '#{teach_data.cell(r, 6).to_s.strip}' OR login = 'tfxy#{teach_data.cell(r, 1)}' " ).first
      else
        old_user = User.where("phone = '#{teach_data.cell(r, 5)}' OR login = 'tfxy#{teach_data.cell(r, 1)}' ").first
      end

      if !old_user.present?
        user = User.new(
          phone: teach_data.cell(r, 5),
          login: "tfxy#{teach_data.cell(r, 1)}",
          type: 'User',
          status: User::STATUS_ACTIVE,
          lastname: teach_data.cell(r, 2),
          nickname: teach_data.cell(r, 2),
          password: "Edu#{teach_data.cell(r, 5)}",
          mail: teach_data.cell(r, 6).to_s&.strip.present? ? teach_data.cell(r, 6).to_s&.strip : nil,
          profile_completed: true,
          professional_certification: 1,
          certification: 1,
          authentication: true,
          laboratory_id: Laboratory.find(1)&.id
        )

        if  user.save!
          departemnt = school.departments.find_or_create_by!(name: teach_data.cell(r, 4))

          user.create_user_extension!(
            school_id: school.id,
            location: school.province,
            location_city: school.city,
            gender: teach_data.cell(r, 3) == '女' ? 1 : 0,
            identity: 0,
            technical_title: '教师',
            department_id: departemnt.id
          )

          open_user = OpenUsers::Cas.find_or_initialize_by(uid: teach_data.cell(r, 1)) do |u|
            u.extra = {phone: teach_data.cell(r, 8)}
            u.user_id = user.id
          end

          p "-------user -----#{user.inspect}"
          open_user.save
       end
      else
        old_user.update(
          lastname: teach_data.cell(r, 2),
          nickname: teach_data.cell(r, 2),
          certification: true,
          professional_certification: true,
          authentication: true,
          profile_completed: true)


        OpenUsers::Cas.find_or_create_by(uid: teach_data.cell(r, 1)) do |u|
          u.extra = {phone: teach_data.cell(r, 5)}
          u.user_id = old_user.id
        end
      end
    end


  end

  task import_courses: :environment do
    desc "同步天府学院课堂数据"

    school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
      d.province = '四川省'
      d.city = '成都'
    end

    course_info = {"C程序设计与实践"=>4, "数据库技术应用"=>2, "数据库应用"=>2, "数据库原理"=>2, "数据库实践"=>2, "面向对象程序设计与实践"=>2, "JavaSE程序设计及实践（辅修）"=>4, "编译原理"=>2, "电路与电子技术"=>3, "传感器原理与应用"=>3, "物联网技术与应用"=>2, "人工智能实践"=>3, "计算机组成原理"=>2, "移动应用开发实训"=>4, "面向对象程序课程设计"=>1, "Web程序设计"=>2, "数据仓库与数据挖掘"=>2, "定量分析技术"=>4, "Python程序设计"=>4, "信息系统分析与设计"=>3, "数据处理综合实训"=>2, "绘画基础Ⅱ（色彩构成）"=>2, "数字图像处理"=>4, "虚拟现实技术及应用"=>4, "三维建模技术"=>4, "游戏技术基础"=>4, "传感器与单片机实训"=>2, "数据库原理与实践"=>4, "高级程序设计（二）"=>4, "数据结构与算法分析"=>4, "实训"=>1, "Linux 操作系统"=>4, "Java Web程序设计与实践"=>8, "软件测试与项目管理"=>4, "Android程序设计"=>8, "移动应用开发"=>4, "商业智能案例分析"=>4, "数据分析与挖掘"=>4, "Oracle DBA"=>4, "信息网络安全测试与评估"=>4, "Android编程"=>8, "电子线路CAD设计"=>2, "ARM接口技术"=>4, "嵌入式Linux应用系统设计"=>4, "信息系统开发实训"=>2, "绘画基础I（平面构成）"=>2, "智能信息处理技术"=>3}

    course_data = xlsx.sheet(4)
    course_data_last_row = course_data.last_row

    2.upto(course_data_last_row) do |r|
      course_group = CourseGroup.find_or_initialize_by(invite_code: course_data.cell(r, 3))

      teach_user = OpenUsers::Cas.find_by(uid: course_data.cell(r, 5))&.user


      puts "----teach_user-----uid-----#{course_data.cell(r, 5)}------#{teach_user.inspect}---"

      if !course_group.persisted? && teach_user.present?
        course = Course.find_or_initialize_by(school_id: school.id, name: course_data.cell(r, 2), invite_code: course_data.cell(r, 1)[3..7]) do |d|
          d.is_public = 0
          d.tea_id = teach_user.id
          d.laboratory_id = Laboratory.find(1)&.id
          d.credit = course_info[course_data.cell(r, 1)]
        end



        if !course.persisted?
          # 创建课堂
          course_list = CourseList.find_or_initialize_by(name: course_data.cell(r, 2), user_id: teach_user.id) do |d|
            d.is_admin = 0
          end

          course.course_list = course_list
          course.invite_code = course_data.cell(r, 1)[3..7]
          course.save!


          CourseInfo.create!(user_id: teach_user.id, course_id: course.id)
          course.create_course_modules(["shixun_homework", "common_homework", "group_homework", "exercise", "attachment", "course_group", "video"])
        end

        course_group.position = course.course_groups_count + 1
        course_group.name = course_data.cell(r, 4)
        course_group.course = course

        course_group.save!


        puts "---course_group----#{course_group.inspect}"

        course_member = CourseMember.find_or_initialize_by(course_id: course.id, user_id: teach_user.id) do |d|
          d.role = 2
          d.course_group_id = 0
        end
        course_member.save! if !course_member.persisted?

        TeacherCourseGroup.create!(course_id: course.id, course_member_id: course_member.id, user_id: teach_user.id, course_group_id: course_group.id)
      end
    end
  end


  task import_students: :environment do
    desc "同步天府学院学生数据"
    student_data = xlsx.sheet(5)
    student_data_last_row = student_data.last_row

    school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
      d.province = '四川省'
      d.city = '成都'
    end

    2.upto(student_data_last_row) do |r|
      # 邮箱存在
      if student_data.cell(r, 9).to_s&.strip.present?
        old_user = User.where("phone = '#{student_data.cell(r, 8)}' OR mail = '#{student_data.cell(r, 9).to_s.strip}' OR login = 'tfxy#{student_data.cell(r, 1)}' " ).first
      else
        old_user = User.where("phone = '#{student_data.cell(r, 8)}' OR login = 'tfxy#{student_data.cell(r, 1)}' " ).first
      end

      if !old_user.present?
        user = User.new(
          phone: student_data.cell(r, 8),
          login: "tfxy#{student_data.cell(r, 1)}",
          type: 'User',
          status: User::STATUS_ACTIVE,
          lastname: student_data.cell(r, 2),
          nickname: student_data.cell(r, 2),
          password: "Edu#{student_data.cell(r, 1)}",
          mail: student_data.cell(r, 9).to_s&.strip.present? ? student_data.cell(r, 9).to_s&.strip : nil,
          profile_completed: true,
          professional_certification: 1,
          certification: 1,
          authentication: true,
          laboratory_id: Laboratory.find(1)&.id
        )

        puts "----user #{user.inspect}"

        if user.save!
          departemnt = school.departments.find_or_create_by!(name: student_data.cell(r, 4))

          user.create_user_extension!(
            school_id: school.id,
            location: school.province,
            location_city: school.city,
            gender: student_data.cell(r, 3) == '女' ? 1 : 0,
            identity: 1,
            student_id: student_data.cell(r, 1),
            department_id: departemnt.id
          )

          OpenUsers::Cas.find_or_create_by(uid: student_data.cell(r, 1)) do |u|
            u.extra = {phone: student_data.cell(r, 8)}
            u.user_id = user.id
          end

        end

      else
        # 系统已有用户，关联sso认证用户
        old_user.update(
          lastname: student_data.cell(r, 2),
          nickname: student_data.cell(r, 2),
          certification: true,
          professional_certification: true,
          authentication: true,
          profile_completed: true)

        OpenUsers::Cas.find_or_create_by(uid: student_data.cell(r, 1)) do |u|
          u.extra = {phone: student_data.cell(r, 8)}
          u.user_id = old_user.id
        end

      end
    end

  end

  task import_course_members: :environment do
    desc "天府学院学生到课程分班"
    course_member_data = xlsx.sheet(6)
    course_member_data_last_row = course_member_data.last_row

    school = School.find_or_create_by(name: '西南财经大学天府学院') do |d|
      d.province = '四川省'
      d.city = '成都'
    end

    2.upto(course_member_data_last_row) do |r|
      course_group = CourseGroup.find_by(invite_code: course_member_data.cell(r, 5))

      student = OpenUsers::Cas.find_by(uid: course_member_data.cell(r, 1))&.user

      puts "------student --- #{course_member_data.cell(r, 1)}--course group--#{course_member_data.cell(r, 5)}"

      if student.present? && course_group.present?

        course_member = CourseMember.find_or_initialize_by(course_id: course_group.course_id, user_id: student.id) do |d|
          d.role = 4
          d.course_group_id = course_group.id
        end
        puts "--------course_member #{course_member.inspect}"
        course_member.save! if !course_member.persisted?
      end
   end
  end


end

