<?php

namespace App\Classes\Modules\Groups\DataTransferObjects;

use App\Classes\General\Interfaces\DataTransferObject;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
use Carbon\Carbon;

class GroupObject implements DataTransferObject
{

    /** @var int */
    private $issuer;

    /** @var int */
    private $receiver;

    /** @var float */
    private $amount;

    /** @var  float */
    private $originalAmount;

    /** @var int */
    private $currencyId;

    /** @var int */
    private $originalCurrencyId;

    /** @var float */
    private $currencyRate;

    /** @var float */
    private $tax;

    /** @var float */
    private $serviceCharge;

    /** @var int|null */
    private $status;

    /** @var string */
    private $reference;

    /** @var int */
    private $paymentMethod;

    /**
     * GroupObject constructor.
     * @param int $issuer
     * @param int $receiver
     * @param float $amount
     * @param float $originalAmount
     * @param int $currencyId
     * @param int $originalCurrencyId
     * @param float $currencyRate
     * @param float $tax
     * @param float $serviceCharge
     * @param string $reference
     * @param int|null $status
     * @param int $paymentMethod
     */
    public function __construct(
        int $issuer,
        int $receiver,
        float $amount,
        float $originalAmount,
        int $currencyId,
        int $originalCurrencyId,
        float $currencyRate,
        float $tax,
        float $serviceCharge,
        int $paymentMethod,
        ?string $reference,
        ?int $status = ApprovalStatus::PENDING_SUBMISSION
    )
    {
        $this->issuer = $issuer;
        $this->receiver = $receiver;
        $this->amount = $amount;
        $this->originalAmount = $originalAmount;
        $this->currencyId = $currencyId;
        $this->originalCurrencyId = $originalCurrencyId;
        $this->currencyRate = $currencyRate;
        $this->tax = $tax;
        $this->serviceCharge = $serviceCharge;
        $this->paymentMethod = $paymentMethod;
        $this->reference = $reference;
        $this->status = $status;
    }

    /**
     * @return int
     */
    public function getIssuer(): int
    {
        return $this->issuer;
    }

    /**
     * @return int
     */
    public function getReceiver(): int
    {
        return $this->receiver;
    }

    /**
     * @return float
     */
    public function getAmount(): float
    {
        return $this->amount;
    }

    /**
     * @return float
     */
    public function getOriginalAmount(): float
    {
        return $this->originalAmount;
    }

    /**
     * @return int
     */
    public function getCurrencyId(): int
    {
        return $this->currencyId;
    }

    /**
     * @return int
     */
    public function getOriginalCurrencyId(): int
    {
        return $this->originalCurrencyId;
    }

    /**
     * @return float
     */
    public function getCurrencyRate(): float
    {
        return $this->currencyRate;
    }

    /**
     * @return float
     */
    public function getTax(): float
    {
        return $this->tax;
    }

    /**
     * @return float
     */
    public function getServiceCharge(): float
    {
        return $this->serviceCharge;
    }

    /**
     * @return int
     */
    public function getStatus(): ?int
    {
        return $this->status;
    }

    /**
     * @return string|null
     */
    public function getReference(): ?string
    {
        return $this->reference;
    }

    /**
     * @return int
     */
    public function getPaymentMethod(): int
    {
        return $this->paymentMethod;
    }
}
