using Api.Services.Contracts;

namespace Api.Services;

public sealed class TextChunker : ITextChunker
{
    public IReadOnlyList<string> Chunk(string text, int chunkSize, int overlap)
    {
        if (string.IsNullOrWhiteSpace(text)) return [];
        chunkSize = Math.Clamp(chunkSize, 300, 3000);
        overlap = Math.Clamp(overlap, 0, chunkSize / 2);

        var chunks = new List<string>();
        var start = 0;
        while (start < text.Length)
        {
            var length = Math.Min(chunkSize, text.Length - start);
            var chunk = text.Substring(start, length).Trim();
            if (!string.IsNullOrWhiteSpace(chunk)) chunks.Add(chunk);
            start += chunkSize - overlap;
        }
        return chunks;
    }
}
