<?php

namespace GlobalPayments\Api\Entities;

use GlobalPayments\Api\Entities\Enums\PayByLinkStatus;
use GlobalPayments\Api\Entities\Enums\PayByLinkType;
use GlobalPayments\Api\Entities\Enums\PaymentMethodUsageMode;
use PHPStanVendor\Nette\Utils\DateTime;

/** PayByLink response data */
class PayByLinkResponse
{
    /**
     * A unique identifier generated by Global Payments to identify the link.
     *
     * @var string
     */
    public $id;

    /**
     * A meaningful label for the merchant account set by Global Payments.
     * @var string
     */
    public $accountName;

    /**
     * The URL that the customer should be redirected to in order to make their payment.
     *
     * @var string
     */
    public $url;

    /**
     * Indicates where a link is in its lifecycle.
     *
     * @var PayByLinkStatus
     */
    public $status;

    /**
     * Describes the type of link that will be created.
     *
     * @var PayByLinkType
     */
    public $type;

    /**
     * Indicates whether the link can be used once or multiple times
     *
     * @var PaymentMethodUsageMode
     */
    public $usageMode;

    /**
     * The number of the times that the link can be used or paid.
     *
     * @var integer
     */
    public $usageLimit;

    /**
     * Merchant defined field to reference the transaction.
     *
     * @var string
     */
    public $reference;

    /**
     * A descriptive name for the link. This will be visible to the customer on the payment page.
     *
     * @var string
     */
    public $name;

    /**
     * A detailed description of your link that will be visible to the customer on the payment page.
     *
     * @var string
     */
    public $description;

    /**
     * Indicates if you want to capture the customers shipping information on the hosted payment page.
     * If you enable this field you can also set an optional shipping fee in the shipping_amount.
     *
     * @var boolean
     */
    public $isShippable;

    /**
     * The number of times a link has been viewed.
     *
     * @var string
     */
    public $viewedCount;

    /**
     * Indicates the date and time after which the link can no longer be used or paid.
     *
     * @var DateTime
     */
    public $expirationDate;

    /**
     * Images that will be displayed to the customer on the payment page.
     * @var array<string>
     */
    public $images;

    /** @var array<string> */
    public $allowedPaymentMethods;
}