<?php

namespace App\Tools\DBAL;

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

class EnumDomainUrlType extends Type
{
    const ENUM_DOMAIN_URL_TYPE = 'EnumDomainUrlType';
    const TYPE_ROOTDOMAIN = 'ROOTDOMAIN';
    const TYPE_SUBDOMAIN = 'SUBDOMAIN';

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

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

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

        return $value;
    }

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

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

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