<?php

namespace App\Classes\Modules\PerfexCRM\DataTransferObjects;

use Illuminate\Http\Request;
use App\Classes\General\Interfaces\DataTransferObject;

class InvoicePerfexCRMObject implements DataTransferObject
{
    /** @var string */
    private $clientId;

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

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

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

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

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

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

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

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

    /** @var array */
    private $allowedPaymentModes;

    /** @var array */
    private $invoiceItems;

    public function __construct(string $clientId, string $number, string $date, string $dueDate, string $currency, float $subTotal, float $total, string $billingStreet, string $projectId, array $allowedPaymentModes, array $invoiceItems)
    {
        $this->clientId = $clientId;
        $this->number = $number;
        $this->date = $date;
        $this->dueDate = $dueDate;
        $this->currency = $currency;
        $this->subTotal = $subTotal;
        $this->total = $total;
        $this->billingStreet = $billingStreet;
        $this->projectId = $projectId;
        $this->allowedPaymentModes = $allowedPaymentModes;
        $this->invoiceItems = $invoiceItems;
    }

    /**
     * @return string
     */
    public function getClientId(): string
    {
        return $this->clientId;
    }

    /**
     * @return string
     */
    public function getNumber(): string
    {
        return $this->number;
    }

    /**
     * @return string
     */
    public function getDate(): string
    {
        return $this->date;
    }

    /**
     * @return string
     */
    public function getDueDate(): string
    {
        return $this->dueDate;
    }

    /**
     * @return string
     */
    public function getCurrency(): string
    {
        return $this->currency;
    }

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

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

    /**
     * @return string
     */
    public function getBillingStreet(): string
    {
        return $this->billingStreet;
    }

    /**
     * @return string
     */
    public function getProjectId(): string
    {
        return $this->projectId;
    }

    /**
     * @return array
     */
    public function getAllowedPaymentModes(): array
    {
        return $this->allowedPaymentModes;
    }

    /**
     * @return array
     */
    public function getInvoiceItems(): array
    {
        return $this->invoiceItems;
    }
}
