<?php

namespace LdapRecord\Query\Pagination;

use LdapRecord\LdapInterface;

class LazyPaginator extends Paginator
{
    /**
     * Execute the pagination request.
     *
     * @param LdapInterface $ldap
     *
     * @return Generator
     */
    public function execute(LdapInterface $ldap)
    {
        $this->prepareServerControls();

        do {
            $this->applyServerControls($ldap);

            if (! $resource = $this->query->run($this->filter)) {
                break;
            }

            $this->updateServerControls($ldap, $resource);

            yield $this->query->parse($resource);
        } while (! empty($this->fetchCookie()));

        $this->resetServerControls($ldap);
    }
}
