<?php

namespace App\Tools\DBAL;

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

class EnumNegotiationMessageAttachContentType extends Type
{
    const ENUM_NAME = 'EnumNegotiationMessageAttachContentType';
    const TYPE_NONE = 'NONE';
    const TYPE_PDF = 'PDF';
    const TYPE_DOCX = 'DOCX';

    protected static $values = [
        self::TYPE_NONE,
        self::TYPE_PDF,
        self::TYPE_DOCX,
    ];

    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
    {
        return sprintf('ENUM('.str_repeat("'%s', ", count(self::$values) - 1)."'%s')", ...self::$values);
    }

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

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

        return $value;
    }

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

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

    /**
     * @return array<string>
     */
    public static function getAvailableTypes()
    {
        return [
            'none' => self::TYPE_NONE,
            'docx' => self::TYPE_DOCX,
            'pdf' => self::TYPE_PDF,
        ];
    }
}
