<?php

declare(strict_types=1);

namespace Acms\Services\Tag;

/**
 * タグ文字列（カンマ・スラッシュ・改行区切り）の配列化を担う。
 */
class TagParser
{
    /**
     * タグの配列化
     *
     * Why not null を許容しない: 移設前の Common::getTagsFromString() は untyped で null を渡すと
     * preg_split() の E_DEPRECATED を伴いつつ空配列を返していたが、新 API では string 厳格を仕様とする
     * （呼び出し側で `?? ''` に倒す）。
     *
     * @param string $string
     * @param bool $checkReserved
     * @return string[]
     */
    public function getTagsFromString(string $string, bool $checkReserved = true): array
    {
        $tags = preg_split(TAG_SEPARATER, $string, -1, PREG_SPLIT_NO_EMPTY);
        $tags = array_map('trim', $tags);
        $tags = array_unique($tags);
        if ($checkReserved) {
            $tags = array_filter($tags, function ($tag) {
                return !isReserved($tag);
            });
        }
        return $tags;
    }
}
