<?php

namespace Knp\Component\Pager\Event\Subscriber\Paginate\Callback;

use Knp\Component\Pager\Event\ItemsEvent;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

/**
 * Callback pagination.
 *
 * @author Piotr Pelczar <me@athlan.pl>
 */
class CallbackSubscriber implements EventSubscriberInterface
{
    public function items(ItemsEvent $event): void
    {
        if ($event->target instanceof CallbackPagination) {
            $event->count = $event->target->getPaginationCount();
            if($event->count > 0) {
                $event->items = $event->target->getPaginationItems($event->getOffset(), $event->getLimit());
            }
            else {
                $event->items = [];
            }

            $event->stopPropagation();
        }
    }

    public static function getSubscribedEvents(): array
    {
        return [
            'knp_pager.items' => ['items', 0],
        ];
    }
}