minetro/mobilni-platby

View on GitHub
src/Request/ConfirmRequest.php

Summary

Maintainability
A
3 hrs
Test Coverage
<?php declare(strict_types = 1);

namespace Contributte\MobilniPlatby\Request;

use Contributte\MobilniPlatby\RequestException;

class ConfirmRequest extends AbstractRequest
{

    public const MESSAGE_NOT_ENOUGHT_CREDIT = 'NOT_ENOUGHT_CREDIT';
    public const MESSAGE_INVALID_OPERATOR = 'INVALID_OPERATOR';
    public const MESSAGE_SERVICE_NOT_ALLOWED = 'SERVICE_NOT_ALLOWED';
    public const MESSAGE_SERVICE_BLOCKED = 'SERVICE_BLOCKED';
    public const MESSAGE_USAGE_RATE_EXCEEDED = 'USAGE_RATE_EXCEEDED';
    public const MESSAGE_MT_SERVICE_NOT_ALLOWED = 'MT_SERVICE_NOT_ALLOWED';
    public const MESSAGE_CUSTOMER_BLOCKED = 'CUSTOMER_BLOCKED';
    public const MESSAGE_DAILY_LIMIT_EXCEEDE = 'DAILY_LIMIT_EXCEEDED';
    public const MESSAGE_INTERNAL_ERROR = 'INTERNAL_ERROR';
    public const MESSAGE_INFO_NOT_AVAILABLEE = 'INFO_NOT_AVAILABLE';

    public const STATUS_DELIVERED = 'DELIVERED';
    public const STATUS_UNDELIVERED = 'UNDELIVERED';
    public const STATUS_PENDING = 'PENDING';
    public const STATUS_WAITING = 'WAITING';
    public const STATUS_UNKNOWN = 'UNKNOWN';

    /** @var int */
    protected $request;

    /** @var string */
    protected $status;

    /** @var string */
    protected $message;

    public function __construct(int $id, int $request, string $message, string $status, int $timestamp, int $att)
    {
        $this->id = $id;
        $this->request = $request;
        $this->setMessage($message);
        $this->setStatus($status);
        $this->setTimestamp($timestamp);
        $this->att = $att;
    }

    /**
     * @throws RequestException
     */
    protected function setMessage(string $message): void
    {
        switch ($message) {
            case self::MESSAGE_CUSTOMER_BLOCKED:
                $this->message = self::MESSAGE_CUSTOMER_BLOCKED;
                break;
            case self::MESSAGE_DAILY_LIMIT_EXCEEDE:
                $this->message = self::MESSAGE_DAILY_LIMIT_EXCEEDE;
                break;
            case self::MESSAGE_INFO_NOT_AVAILABLEE:
                $this->message = self::MESSAGE_INFO_NOT_AVAILABLEE;
                break;
            case self::MESSAGE_INTERNAL_ERROR:
                $this->message = self::MESSAGE_INTERNAL_ERROR;
                break;
            case self::MESSAGE_INVALID_OPERATOR:
                $this->message = self::MESSAGE_INVALID_OPERATOR;
                break;
            case self::MESSAGE_MT_SERVICE_NOT_ALLOWED:
                $this->message = self::MESSAGE_MT_SERVICE_NOT_ALLOWED;
                break;
            case self::MESSAGE_NOT_ENOUGHT_CREDIT:
                $this->message = self::MESSAGE_NOT_ENOUGHT_CREDIT;
                break;
            case self::MESSAGE_SERVICE_BLOCKED:
                $this->message = self::MESSAGE_SERVICE_BLOCKED;
                break;
            case self::MESSAGE_SERVICE_NOT_ALLOWED:
                $this->message = self::MESSAGE_SERVICE_NOT_ALLOWED;
                break;
            case self::MESSAGE_USAGE_RATE_EXCEEDED:
                $this->message = self::MESSAGE_USAGE_RATE_EXCEEDED;
                break;
            default:
                $this->message = $message;
            //throw new RequestException("Request: Uknown message '$message'.");
        }
    }

    public function getMessage(): string
    {
        return $this->message;
    }

    public function getRequest(): int
    {
        return $this->request;
    }

    /**
     * @throws RequestException
     */
    protected function setStatus(string $status): void
    {
        switch ($status) {
            case self::STATUS_DELIVERED:
                $this->status = self::STATUS_DELIVERED;
                break;
            case self::STATUS_PENDING:
                $this->status = self::STATUS_PENDING;
                break;
            case self::STATUS_UNDELIVERED:
                $this->status = self::STATUS_UNDELIVERED;
                break;
            case self::STATUS_UNKNOWN:
                $this->status = self::STATUS_UNKNOWN;
                break;
            case self::STATUS_WAITING:
                $this->status = self::STATUS_WAITING;
                break;
            default:
                throw new RequestException(sprintf("Request: Uknown status '%s'.", $status));
        }
    }

    public function getStatus(): string
    {
        return $this->status;
    }

    public function getType(): int
    {
        return self::TYPE_CONFIRM;
    }

}