<?php

/**
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; under version 2
 * of the License (non-upgradable).
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 *
 * Copyright (c) 2017 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
 *
 *
 */

namespace oat\ltiDeliveryProvider\model\execution\implementation;

use oat\ltiDeliveryProvider\model\execution\LTIDeliveryExecutionLink;

/**
 * Class KvLTIDeliveryExecutionLink
 * Key value implementation of LTIDeliveryExecutionLink
 * @package oat\ltiDeliveryProvider\model\execution\implementation
 */
class KvLTIDeliveryExecutionLink implements LTIDeliveryExecutionLink, \JsonSerializable
{


    private $userId;
    private $deliveryExecutionId;
    private $linkId;

    /**
     * KvLTIDeliveryExecutionLink constructor.
     * @param $userId
     * @param $deliveryExecutionId
     * @param $linkId
     */
    public function __construct($userId, $deliveryExecutionId, $linkId)
    {
        $this->userId = $userId;
        $this->deliveryExecutionId = $deliveryExecutionId;
        $this->linkId = $linkId;
    }


    /**
     * @return string
     */
    public function getUserId()
    {
        return $this->userId;
    }

    /**
     * @param string $userId
     */
    public function setUserId($userId)
    {
        $this->userId = $userId;
    }

    /**
     * @return string
     */
    public function getDeliveryExecutionId()
    {
        return $this->deliveryExecutionId;
    }

    /**
     * @param string $deliveryExecutionId
     */
    public function setDeliveryExecutionId($deliveryExecutionId)
    {
        $this->deliveryExecutionId = $deliveryExecutionId;
    }

    /**
     * @return string
     */
    public function getLinkId()
    {
        return $this->linkId;
    }

    /**
     * @param string $linkId
     */
    public function setLinkId($linkId)
    {
        $this->linkId = $linkId;
    }


    /**
     * @param $values
     * @return KvLTIDeliveryExecutionLink[]
     */
    public static function unSerialize($values)
    {
        $links = [];
        $data = $values !== false ? json_decode($values, true) : [];

        foreach ($data as $linkData) {
            if (isset($linkData['userId'], $linkData['linkId'], $linkData['deliveryExecutionId'])) {
                $links[] = new self($linkData['userId'], $linkData['deliveryExecutionId'], $linkData['linkId']);
            }
        }

        return $links;
    }


    public function jsonSerialize()
    {
        return [
            'userId' => $this->getUserId(),
            'deliveryExecutionId' => $this->getDeliveryExecutionId(),
            'linkId' => $this->getLinkId(),
        ];
    }
}