<?php

namespace App\Tools\DBAL;

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

class EnumHttpProtocolType extends Type
{
    const ENUM_HTTP_PROTOCOL_TYPE = 'EnumHttpProtocolType';
    const TYPE_HTTP = 'http://';
    const TYPE_HTTPS = 'https://';

    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
    {
        return sprintf("ENUM('%s', '%s')", self::TYPE_HTTP, self::TYPE_HTTPS);
    }

    public function convertToPHPValue($value, AbstractPlatform $platform)
    {
        return $value;
    }

    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        if ($value && !in_array($value, [
                    self::TYPE_HTTP,
                    self::TYPE_HTTPS,
                ]
            )) {
            throw new \InvalidArgumentException('Invalid domain url type');
        }

        return $value;
    }

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

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

    /**
     * @return array<string>
     */
    public static function getAvailableTypes()
    {
        return [
            'Root Domain' => self::TYPE_HTTP,
            'Subdomain' => self::TYPE_HTTPS,
        ];
    }
}
