<?php

namespace App\Classes\Modules\Addresses\DataTransferObjects;

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

class AddressObject implements DataTransferObject
{

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

    /** @var string|null */
    private $streetTwo;

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

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

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

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

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

    /**
     * AddressObject constructor.
     * @param string $streetOne
     * @param null|string $streetTwo
     * @param int $countryId
     * @param int $stateId
     * @param int $districtId
     * @param int $postCode
     * @param null|string $reference
     */
    public function __construct(string $streetOne, ?string $streetTwo, int $countryId, int $stateId, int $districtId, int $postCode, ?string $reference = null, ?int $status = ApprovalStatus::APPROVED)
    {
        $this->streetOne = $streetOne;
        $this->streetTwo = $streetTwo;
        $this->countryId = $countryId;
        $this->stateId = $stateId;
        $this->districtId = $districtId;
        $this->postCode = $postCode;
        $this->reference = $reference;
        $this->status = $status;
    }

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

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

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

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

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

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

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

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


}