<?php

namespace App\Support;

/**
 * Basit sıra numarası üretici.
 *
 * Tüm modüllerdeki kayıt kodları acente (veya tur) kapsamında 1'den başlayan
 * düz sayılardır. Bu sınıf, verilen sorgu kapsamındaki en büyük SAYISAL kodu
 * bulup bir fazlasını döndürür. Soft-delete edilen satırlar unique indekslerde
 * yer tutmaya devam ettiği için çağıran taraf sorguyu withTrashed() ile
 * kurmalıdır — böylece silinen bir kaydın numarası yeniden kullanılmaz.
 */
class SequentialCode
{
    /**
     * @param \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Query\Builder $query Kapsam sorgusu (ör. aynı acentenin kayıtları)
     * @param string $column Kod kolonu adı
     */
    public static function next($query, string $column = 'code'): string
    {
        $max = (int) $query->pluck($column)
            ->filter(fn ($c) => $c !== null && ctype_digit((string) $c))
            ->map(fn ($c) => (int) $c)
            ->max();

        return (string) ($max + 1);
    }
}
