class Csv::AppleManager::StaffService < Csv::ApplicationService
  def initialize(school)
    @school = school
  end

  def call
    CSV.generate do |csv|
      csv << headers
      employees.each do |employee|
        next if missing_data?(employee)

        csv << content(employee)
      end
    end
  end

  private
    def config
      @school.find_or_build_apple_manager_config
    end

    def employees
      @school.employees.preload(:state_id, :school_number).is_current(true)
    end

    def missing_data?(employee)
      [:first_name, :last_name, :location_id?].any? { |p| employee.send(p).blank? }
    end

    def headers
      [
        'person_id',
        'person_number',
        'first_name',
        'middle_name',
        'last_name',
        'email_address',
        'sis_username',
        'password_policy',
        'location_id'
      ]
    end

    def content(employee)
      [
        employee.id,
        employee.decorate.send(config.staff_identifier),
        employee.first_name,
        employee.middle_name,
        employee.last_name,
        employee.email,
        employee.username,
        8,
        employee.location_id
      ]
    end
end
