      1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:
                 18:  19:  20:  21:  22:  23:
                 24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:
                 44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:
                 60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:
                 76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:
                 92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124:

    <?php

    /*
     * This file is part of the affilinet Product Data PHP SDK.
     *
     * For the full copyright and license information, please view the LICENSE
     * file that was distributed with this source code.
     */

    namespace Affilinet\ProductData\Responses;

    use Affilinet\ProductData\Responses\ResponseElements\Category;
    use Affilinet\ProductData\Responses\ResponseElements\CategoryInterface;
    use Psr\Http\Message\ResponseInterface;

    /**
     * Class CategoriesResponse
     * @package Affilinet\ProductData\Responses
     */
    class CategoriesResponse extends AbstractResponse implements CategoriesResponseInterface
    {
        /**
         * @var CategoryInterface[]
         */
        private $categories;

        /**
         * GetProductsResponse constructor.
         * @param ResponseInterface $response
         */
        public function __construct(ResponseInterface $response)
        {
            parent::__construct($response);

            $this->categories = [];

            foreach ($this->responseArray['Categories'] as $shop) {
                $this->categories[] = new Category($shop);
            }
        }

        /**
         * @return int
         */
        public function totalRecords()
        {
            return $this->responseArray['GetCategoryListSummary']['TotalRecords'];
        }

        /**
         * @return int
         */
        public function pageSize()
        {
            return $this->responseArray['GetCategoryListSummary']['Records'];
        }

        /**
         * @return int
         */
        public function totalPages()
        {
            return $this->responseArray['GetCategoryListSummary']['TotalPages'];
        }

        /**
         * @return int
         */
        public function pageNumber()
        {
            return $this->responseArray['GetCategoryListSummary']['CurrentPage'];
        }

        /**
         * @return int
         */
        public function getProgramId()
        {
            return intval($this->responseArray['GetCategoryListSummary']['ProgramId']);
        }

        /**
         * @return string
         */
        public function getProgramName()
        {
            return $this->responseArray['GetCategoryListSummary']['ProgramTitle'];
        }

        /**
         * @return integer
         */
        public function getShopId()
        {
            return intval($this->responseArray['GetCategoryListSummary']['ShopId']);
        }

        /**
         * @return string
         */
        public function getShopName()
        {
            return $this->responseArray['GetCategoryListSummary']['ShopTitle'];
        }

        /**
         * alias of $this->categories()
         * @return CategoryInterface[]
         */
        public function getCategories()
        {
            return $this->categories();
        }

        /**
         * @return CategoryInterface[]
         */
        public function categories()
        {
            return $this->categories;
        }

    }