<?php

declare(strict_types=1);


namespace App\Support;

use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;

class SlugGenerator
{
    /**
     * 生成唯一 slug。中文标题自动回退为 $fallback 或 crc32 形式。
     */
    public static function make(string $string, string $table, string $column = 'slug', ?int $ignoreId = null, ?string $fallback = null): string
    {
        $slug = Str::slug($string, '-', 'en');
        if ($slug === '' || $slug === null) {
            $slug = $fallback ?? $table.'-'.crc32($string);
        }

        $base = $slug;
        $i = 2;

        while (DB::table($table)->where($column, $slug)->where('id', '!=', $ignoreId ?? 0)->exists()) {
            $slug = $base.'-'.$i++;
        }

        return $slug;
    }
}
