require 'csv'

class Support::Sites::Schools::Import::StudentNamesController < Support::Sites::Controller
  def update
    nicknames = []
    students.each do |student|
      nickname = student.nickname || student.build_nickname
      nickname.first_name = names_by_student_ids[student.id]
      nicknames << nickname
    end

    if transactional_save(nicknames)
      render_success :ok
    else
      render_error :unprocessable_entity
    end
  end

  private
    def school
      @school ||= School.find_by(id: params[:school_id])
    end

    def students
      school.students.where(id: names_by_student_ids.keys).includes(:nickname)
    end

    def names_by_student_ids
      @names_by_student_ids ||= CSV.parse(read_file, headers: true)
        .map { |i| [i['id'].to_i, i['name']] }
        .to_h
    end

    def read_file
      File.read(params[:file].tempfile)
    end
end
