class Admin::Legacy::HumanResources::Employees::NamesController <
    Admin::Legacy::HumanResources::Controller
  def index
    employee.sync_legacy_names
    render_success :ok, json: names.map { |n| name_props(n) }
  end

  def show
    render_success :ok, json: name_props(name)
  end

  def create
    name = names.build(name_params)

    if name.save
      render_success :ok, json: name_props(name)
    else
      render_error :unprocessable_entity, errors: name
    end
  end

  def update
    if name.update(name_params)
      render_success :ok, json: name_props(name)
    else
      render_error :unprocessable_entity, errors: name
    end
  end

  def destroy
    if name.destroy
      render_success :ok
    else
      render_error :unprocessable_entity, errors: name
    end
  end

  def available
    render_success :ok, json: employee.available_names(params[:types] || [])
  end

  private
    def permissions
      if [:index, :show, :available].include?(action_name.to_sym)
        ['read', 'write', 'manage']
      else
        ['write', 'manage']
      end
    end

    def employee
      @employee ||= current_school.employees.find_by(id: params[:employee_id])
    end

    def names
      employee.names
    end

    def name
      @name ||= names.find_by(id: params[:id])
    end

    def name_params
      params.permit(:first_name, :middle_name, :last_name, :suffix, :code)
    end

    def name_props(name)
      {
        id: name.id,
        code: name.code,
        first_name: name.first_name,
        middle_name: name.middle_name,
        last_name: name.last_name,
        suffix: name.suffix,
        full_name: employee.full_name
      }
    end
end
