<?php
declare(strict_types=1);

namespace Autogedal\Manufacturers\Service;

class SlugHandler
{
    private const MAX_SLUG_LENGTH = 255;

    public function generateSlug(string $value): string
    {
        if (empty($value)) {
            return '';
        }

        $slug = trim(preg_replace('/[^a-z0-9]+/', '-', strtolower($value)) ?? '', '-');

        return rtrim(substr($slug, 0, self::MAX_SLUG_LENGTH), '-');
    }

    public function validateSlug(string $slug): bool
    {
        return !empty($slug)
            && strlen($slug) <= self::MAX_SLUG_LENGTH
            && preg_match('/^[a-z0-9-]+$/', $slug) === 1;
    }

    public function makeSlugUnique(string $baseSlug, array $existingSlugs): string
    {
        $slug = $baseSlug;
        $counter = 1;
        while (in_array($slug, $existingSlugs, true)) {
            $suffix = '-' . $counter;
            $slug = substr($baseSlug, 0, self::MAX_SLUG_LENGTH - strlen($suffix)) . $suffix;
            $counter++;
        }

        return $slug;
    }
}
