      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:

    <?php
    /*
     * This file is part of the Affilinet Publisher SDK package.
     *
     * (c) Affilinet GmbH
     *
     * 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\Facet;
    use Affilinet\ProductData\Responses\ResponseElements\Product;
    use Psr\Http\Message\ResponseInterface as PsrResponse;

    /**
     * Class ProductsResponse
     */
    class ProductsResponse extends AbstractResponse implements ProductsResponseInterface
    {

        /**
         * @var Product[]
         */
        private $products;

        /**
         * @var Facet[]
         */
        private $facets;

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

            $this->products = [];

            foreach ($this->responseArray['Products'] as $product) {
                $this->products[] = new Product($product);
            }
            $this->facets = [];

            if (isset($this->responseArray['Facets'])) {
                foreach ($this->responseArray['Facets'] as $facet) {
                    $this->facets[] = new Facet($facet);
                }
            }

        }

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

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

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

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

        /**
         * alias of $this->products()
         * @return ResponseElements\Product[]
         */
        public function getProducts()
        {
            return $this->products();
        }

        /**
         * @return ResponseElements\Product[]
         */
        public function products()
        {
            return $this->products;
        }

        /**
         * alias of $this->facets()
         *
         */
        public function getFacets()
        {
            return $this->facets();
        }

        /**
         * @return ResponseElements\Facet[]
         */
        public function facets()
        {
            return $this->facets;
        }

    }