<?php

namespace Inpsyde\Lib\PayPal\Api;

use Inpsyde\Lib\PayPal\Common\PayPalModel;

/**
 * Class RefundRequest
 *
 * A refund transaction.
 *
 * @package Inpsyde\Lib\PayPal\Api
 *
 * @property \Inpsyde\Lib\PayPal\Api\Amount amount
 * @property string description
 * @property string refund_source
 * @property string reason
 * @property string invoice_number
 * @property bool refund_advice
 */
class RefundRequest extends PayPalModel
{
    /**
     * Details including both refunded amount (to payer) and refunded fee (to payee).
     *
     * @param \Inpsyde\Lib\PayPal\Api\Amount $amount
     * 
     * @return $this
     */
    public function setAmount($amount)
    {
        $this->amount = $amount;
        return $this;
    }

    /**
     * Details including both refunded amount (to payer) and refunded fee (to payee).
     *
     * @return \Inpsyde\Lib\PayPal\Api\Amount
     */
    public function getAmount()
    {
        return $this->amount;
    }

    /**
     * Description of what is being refunded for. Character length and limitations: 255 single-byte alphanumeric characters.
     *
     * @param string $description
     * 
     * @return $this
     */
    public function setDescription($description)
    {
        $this->description = $description;
        return $this;
    }

    /**
     * Description of what is being refunded for. Character length and limitations: 255 single-byte alphanumeric characters.
     *
     * @return string
     */
    public function getDescription()
    {
        return $this->description;
    }

    /**
     * Type of PayPal funding source (balance or eCheck) that can be used for auto refund.
     * Valid Values: ["INSTANT_FUNDING_SOURCE", "ECHECK", "UNRESTRICTED"]
     *
     * @param string $refund_source
     * 
     * @return $this
     */
    public function setRefundSource($refund_source)
    {
        $this->refund_source = $refund_source;
        return $this;
    }

    /**
     * Type of PayPal funding source (balance or eCheck) that can be used for auto refund.
     *
     * @return string
     */
    public function getRefundSource()
    {
        return $this->refund_source;
    }

    /**
     * Reason description for the Sale transaction being refunded.
     *
     * @param string $reason
     * 
     * @return $this
     */
    public function setReason($reason)
    {
        $this->reason = $reason;
        return $this;
    }

    /**
     * Reason description for the Sale transaction being refunded.
     *
     * @return string
     */
    public function getReason()
    {
        return $this->reason;
    }

    /**
     * The invoice number that is used to track this payment. Character length and limitations: 127 single-byte alphanumeric characters.
     *
     * @param string $invoice_number
     * 
     * @return $this
     */
    public function setInvoiceNumber($invoice_number)
    {
        $this->invoice_number = $invoice_number;
        return $this;
    }

    /**
     * The invoice number that is used to track this payment. Character length and limitations: 127 single-byte alphanumeric characters.
     *
     * @return string
     */
    public function getInvoiceNumber()
    {
        return $this->invoice_number;
    }

    /**
     * Flag to indicate that the buyer was already given store credit for a given transaction.
     *
     * @param bool $refund_advice
     * 
     * @return $this
     */
    public function setRefundAdvice($refund_advice)
    {
        $this->refund_advice = $refund_advice;
        return $this;
    }

    /**
     * Flag to indicate that the buyer was already given store credit for a given transaction.
     *
     * @return bool
     */
    public function getRefundAdvice()
    {
        return $this->refund_advice;
    }

}
