<?php

namespace GlobalPayments\Api\Entities\Reporting;

use DateTime;
use GlobalPayments\Api\Entities\Enums\PayByLinkStatus;
use GlobalPayments\Api\Entities\Enums\PayByLinkType;
use GlobalPayments\Api\Entities\Enums\PaymentMethodName;
use GlobalPayments\Api\Entities\Enums\PaymentMethodUsageMode;

class PayByLinkSummary extends BaseSummary
{
    /** @var string */
    public $accountId;

    /** @var string */
    public $accountName;

    /**
     * A unique identifier generated by Global Payments to identify the link.
     *
     * @var string
     */
    public $id;

    /**
     * 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;

    /**
     * The payment methods available to create transactions with.
     *
     * @var array<PaymentMethodName>
     */
    public $allowedPaymentMethods;

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

    /**
     * Indicates the number of times that a link has already been successfully paid.
     *
     * @var string
     */
    public $usageCount;

    /** @var string */
    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.
     * @var string
     */
    public $shippable;

    /** @var string */
    public $shippingAmount;

    /**
     * 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 (base64 encoded image)
     *
     * @var array<string>
     */
    public $images;

    /**
     * List of transactions attached to this payment link
     *
     * @var array<TransactionSummary>
     */
    public $transactions = [];
}