<?php

namespace PayPal\Api;

use PayPal\Common\PayPalModel;
use PayPal\Validation\UrlValidator;

/**
 * Class Incentive
 *
 * A resource representing a incentive.
 *
 * @package PayPal\Api
 *
 * @property string               id
 * @property string               code
 * @property string               name
 * @property string               description
 * @property \PayPal\Api\Currency minimum_purchase_amount
 * @property string               logo_image_url
 * @property string               expiry_date
 * @property string               type
 * @property string               terms
 */
class Incentive extends PayPalModel
{
    /**
     * Identifier of the instrument in PayPal Wallet
     *
     * @param string $id
     *
     * @return $this
     */
    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }

    /**
     * Identifier of the instrument in PayPal Wallet
     *
     * @return string
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Code that identifies the incentive.
     *
     * @param string $code
     *
     * @return $this
     */
    public function setCode($code)
    {
        $this->code = $code;
        return $this;
    }

    /**
     * Code that identifies the incentive.
     *
     * @return string
     */
    public function getCode()
    {
        return $this->code;
    }

    /**
     * Name of the incentive.
     *
     * @param string $name
     *
     * @return $this
     */
    public function setName($name)
    {
        $this->name = $name;
        return $this;
    }

    /**
     * Name of the incentive.
     *
     * @return string
     */
    public function getName()
    {
        return $this->name;
    }

    /**
     * Description of the incentive.
     *
     * @param string $description
     *
     * @return $this
     */
    public function setDescription($description)
    {
        $this->description = $description;
        return $this;
    }

    /**
     * Description of the incentive.
     *
     * @return string
     */
    public function getDescription()
    {
        return $this->description;
    }

    /**
     * Indicates incentive is applicable for this minimum purchase amount.
     *
     * @param \PayPal\Api\Currency $minimum_purchase_amount
     *
     * @return $this
     */
    public function setMinimumPurchaseAmount($minimum_purchase_amount)
    {
        $this->minimum_purchase_amount = $minimum_purchase_amount;
        return $this;
    }

    /**
     * Indicates incentive is applicable for this minimum purchase amount.
     *
     * @return \PayPal\Api\Currency
     */
    public function getMinimumPurchaseAmount()
    {
        return $this->minimum_purchase_amount;
    }

    /**
     * Logo image url for the incentive.
     *
     * @param string $logo_image_url
     * @throws \InvalidArgumentException
     * @return $this
     */
    public function setLogoImageUrl($logo_image_url)
    {
        UrlValidator::validate($logo_image_url, "LogoImageUrl");
        $this->logo_image_url = $logo_image_url;
        return $this;
    }

    /**
     * Logo image url for the incentive.
     *
     * @return string
     */
    public function getLogoImageUrl()
    {
        return $this->logo_image_url;
    }

    /**
     * expiry date of the incentive.
     *
     * @param string $expiry_date
     *
     * @return $this
     */
    public function setExpiryDate($expiry_date)
    {
        $this->expiry_date = $expiry_date;
        return $this;
    }

    /**
     * expiry date of the incentive.
     *
     * @return string
     */
    public function getExpiryDate()
    {
        return $this->expiry_date;
    }

    /**
     * Specifies type of incentive
     * Valid Values: ["COUPON", "GIFT_CARD", "MERCHANT_SPECIFIC_BALANCE", "VOUCHER"]
     *
     * @param string $type
     *
     * @return $this
     */
    public function setType($type)
    {
        $this->type = $type;
        return $this;
    }

    /**
     * Specifies type of incentive
     *
     * @return string
     */
    public function getType()
    {
        return $this->type;
    }

    /**
     * URI to the associated terms
     *
     * @param string $terms
     *
     * @return $this
     */
    public function setTerms($terms)
    {
        $this->terms = $terms;
        return $this;
    }

    /**
     * URI to the associated terms
     *
     * @return string
     */
    public function getTerms()
    {
        return $this->terms;
    }

}
