<?php

namespace App\Tools\DBAL;

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

class EnumCampaignScheduleType extends Type
{
    const ENUM_CAMPAIGN_SCHEDULE_TYPE = 'EnumCampaignScheduleType';
    const TYPE_ACTION = 'ACTIONS';
    const TYPE_CONTENT = 'CONTENTS';
    const TYPE_RESEARCH = 'RESEARCHES';
    const TYPE_REPORT = 'REPORTS';
    const TYPE_TASK_LIST = 'TASK_LISTS';

    public function getSQLDeclaration(array $fieldDeclaration, AbstractPlatform $platform)
    {
        return "ENUM('ACTIONS', 'CONTENTS', 'RESEARCHES', 'REPORTS', 'TASK_LISTS')";
    }

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

    public function convertToDatabaseValue($value, AbstractPlatform $platform)
    {
        if (!in_array($value, [
                self::TYPE_ACTION,
                self::TYPE_CONTENT,
                self::TYPE_RESEARCH,
                self::TYPE_REPORT,
                self::TYPE_TASK_LIST,
            ]
        )) {
            throw new \InvalidArgumentException('Invalid schedule job type');
        }

        return $value;
    }

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

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

    /**
     * @return array<string>
     */
    public static function getAvailableTypes()
    {
        return [
            'action' => self::TYPE_ACTION,
            'content' => self::TYPE_CONTENT,
            'research' => self::TYPE_RESEARCH,
            'report' => self::TYPE_REPORT,
            'task list' => self::TYPE_TASK_LIST,
        ];
    }
}
