<?php
declare(strict_types=1);
namespace App\Domain\Payment\Model;
class PaymentStatus
{
public const INITIATED = 'initiated';
public const PENDING = 'pending';
public const COMPLETED = 'completed';
public const CANCELLED = 'cancelled';
public const REJECTED = 'rejected';
public const VALUES = [
self::INITIATED,
self::PENDING,
self::COMPLETED,
self::CANCELLED,
self::REJECTED,
];
private string $value;
public function __construct(string $value)
{
if (!\in_array($value, self::VALUES, true)) {
throw new \InvalidArgumentException('Invalid value for payment status.');
}
$this->value = $value;
}
public function __toString(): string
{
return $this->value;
}
public function getValue(): string
{
return $this->value;
}
public static function initiated(): self
{
return new self(self::INITIATED);
}
public static function pending(): self
{
return new self(self::PENDING);
}
public static function completed(): self
{
return new self(self::COMPLETED);
}
public static function cancelled(): self
{
return new self(self::CANCELLED);
}
public static function rejected(): self
{
return new self(self::REJECTED);
}
public function isCompleted(): bool
{
return self::COMPLETED === $this->value;
}
public function isRejected(): bool
{
return self::REJECTED === $this->value;
}
public function isCancelled(): bool
{
return self::CANCELLED === $this->value;
}
public function isFailed(): bool
{
return self::REJECTED === $this->value || self::CANCELLED === $this->value;
}
public function isPending(): bool
{
return self::PENDING === $this->value;
}
}