<?php

declare(strict_types=1);

namespace App\Domain\Reader\Application\Response;

use App\Domain\Reader\Domain\Model\Page;

final class ChapterPagesResponse
{
    /** @var array<PageResponse> */
    private array $pages;
    private int $totalItems;
    private int $currentPage;
    private int $itemsPerPage;

    /**
     * @param array<Page> $pages
     */
    public function __construct(array $pages, int $totalItems, int $currentPage, int $itemsPerPage)
    {
        $this->pages = array_map(
            static fn (Page $page) => new PageResponse($page),
            $pages
        );
        $this->totalItems = $totalItems;
        $this->currentPage = $currentPage;
        $this->itemsPerPage = $itemsPerPage;
    }

    /**
     * @return array<PageResponse>
     */
    public function getPages(): array
    {
        return $this->pages;
    }

    public function getTotalItems(): int
    {
        return $this->totalItems;
    }

    public function getCurrentPage(): int
    {
        return $this->currentPage;
    }

    public function getItemsPerPage(): int
    {
        return $this->itemsPerPage;
    }

    public function getTotalPages(): int
    {
        return (int) ceil($this->totalItems / $this->itemsPerPage);
    }
}
