package xstrings_test

import (
	xtrings "github.com/mudler/LocalAGI/pkg/xstrings"
	. "github.com/onsi/ginkgo/v2"
	. "github.com/onsi/gomega"
)

var _ = Describe("SplitParagraph", func() {
	It("should return the text as a single chunk if it's shorter than maxLen", func() {
		text := "Short text"
		maxLen := 20
		result := xtrings.SplitParagraph(text, maxLen)
		Expect(result).To(Equal([]string{"Short text"}))
	})

	It("should split the text into chunks of maxLen without truncating words", func() {
		text := "This is a longer text that needs to be split into chunks."
		maxLen := 10
		result := xtrings.SplitParagraph(text, maxLen)
		Expect(result).To(Equal([]string{"This is a", "longer", "text that", "needs to", "be split", "into", "chunks."}))
	})

	It("should handle texts with multiple spaces and newlines correctly", func() {
		text := "This  is\na\ntext  with\n\nmultiple spaces   and\nnewlines."
		maxLen := 10
		result := xtrings.SplitParagraph(text, maxLen)
		Expect(result).To(Equal([]string{"This  is\na\n", "text  with\n", "multiple", "spaces  ", "and\n", "newlines."}))
	})

	It("should handle a text with a single word longer than maxLen", func() {
		text := "supercalifragilisticexpialidocious"
		maxLen := 10
		result := xtrings.SplitParagraph(text, maxLen)
		Expect(result).To(Equal([]string{"supercalifragilisticexpialidocious"}))
	})

	It("should handle a text with empty lines", func() {
		text := "line1\n\nline2"
		maxLen := 10
		result := xtrings.SplitParagraph(text, maxLen)
		Expect(result).To(Equal([]string{"line1\n\n", "line2"}))
	})

	It("should handle a text with leading and trailing spaces", func() {
		text := "   leading spaces and trailing spaces   "
		maxLen := 15
		result := xtrings.SplitParagraph(text, maxLen)
		Expect(result).To(Equal([]string{"   leading", "spaces and", "trailing spaces"}))
	})

	It("should handle a text with only spaces", func() {
		text := "   "
		maxLen := 10
		result := xtrings.SplitParagraph(text, maxLen)
		Expect(result).To(Equal([]string{"   "}))
	})

	It("should handle empty string", func() {
		text := ""
		maxLen := 10
		result := xtrings.SplitParagraph(text, maxLen)
		Expect(result).To(Equal([]string{""}))
	})

	It("should handle a text with only newlines", func() {
		text := "\n\n\n"
		maxLen := 10
		result := xtrings.SplitParagraph(text, maxLen)
		Expect(result).To(Equal([]string{"\n\n\n"}))
	})

	It("should handle a text with special characters", func() {
		text := "This is a text with special characters !@#$%^&*()"
		maxLen := 20
		result := xtrings.SplitParagraph(text, maxLen)
		Expect(result).To(Equal([]string{"This is a text with", "special characters", "!@#$%^&*()"}))
	})
})
