<?php

namespace App\Tools\DBAL;

use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Types\Type;

class EnumBillingStatusType extends Type
{
    const ENUM_BILLING_STATUS_TYPE = 'EnumBillingStatusType';
    const TYPE_PAID = 'PAID';
    const TYPE_UNPAID = 'UNPAID';

    protected static $values = [
        'TYPE_ACTIVE' => self::TYPE_PAID,
        'TYPE_INACTIVE' => self::TYPE_UNPAID,
    ];

    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
    {
        return "ENUM('PAID', 'UNPAID')";
    }

    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        if ($value && !in_array($value, self::$values)) {
            throw new \InvalidArgumentException('Invalid status');
        }

        return $value;
    }

    public function getName()
    {
        return self::ENUM_BILLING_STATUS_TYPE;
    }

    public function requiresSQLCommentHint(AbstractPlatform $platform)
    {
        return true;
    }

    /**
     * @return array <string>
     */
    public static function getValues()
    {
        return [
            'Paid' => static::TYPE_PAID,
            'Unpaid' => static::TYPE_UNPAID,
        ];
    }
}
