package textutil

import (
	"bytes"
	"io"
	"strings"
	"testing"
)

type lp struct {
	line, para string
}

var (
	allIndents  = [][]int{nil, {}, {1}, {2}, {1, 2}, {2, 1}}
	allIndents1 = [][]int{{1}, {2}, {1, 2}, {2, 1}}
)

func TestLineWriter(t *testing.T) {
	tests := []struct {
		Width   int
		Indents [][]int
		In      string // See xlateIn for details on the format
		Want    string // See xlateWant for details on the format
	}{
		// Completely blank input yields empty output.
		{4, allIndents, "", ""},
		{4, allIndents, " ", ""},
		{4, allIndents, "  ", ""},
		{4, allIndents, "   ", ""},
		{4, allIndents, "    ", ""},
		{4, allIndents, "     ", ""},
		{4, allIndents, "      ", ""},
		{4, allIndents, "F N  R   V    L     P      ", ""},
		// Single words never get word-wrapped, even if they're long.
		{4, allIndents, "a", "0a."},
		{4, allIndents, "ab", "0ab."},
		{4, allIndents, "abc", "0abc."},
		{4, allIndents, "abcd", "0abcd."},
		{4, allIndents, "abcde", "0abcde."},
		{4, allIndents, "abcdef", "0abcdef."},
		// Word-wrapping boundary conditions.
		{4, allIndents, "abc ", "0abc."},
		{4, allIndents, "abc  ", "0abc."},
		{4, allIndents, "abcN", "0abc."},
		{4, allIndents, "abcN ", "0abc."},
		{4, allIndents, "abcd ", "0abcd."},
		{4, allIndents, "abcd  ", "0abcd."},
		{4, allIndents, "abcdN", "0abcd."},
		{4, allIndents, "abcdN ", "0abcd."},
		{4, [][]int{nil}, "a cd", "0a cd."},
		{4, [][]int{nil}, "a cd ", "0a cd."},
		{4, [][]int{nil}, "a cdN", "0a cd."},
		{4, allIndents1, "a cd", "0a.1cd."},
		{4, allIndents1, "a cd ", "0a.1cd."},
		{4, allIndents1, "a cdN", "0a.1cd."},
		{4, allIndents, "a cde", "0a.1cde."},
		{4, allIndents, "a cde ", "0a.1cde."},
		{4, allIndents, "a cdeN", "0a.1cde."},
		{4, [][]int{nil}, "a  d", "0a  d."},
		{4, [][]int{nil}, "a  d ", "0a  d."},
		{4, [][]int{nil}, "a  dN", "0a  d."},
		{4, allIndents1, "a  d", "0a.1d."},
		{4, allIndents1, "a  d ", "0a.1d."},
		{4, allIndents1, "a  dN", "0a.1d."},
		{4, allIndents, "a  de", "0a.1de."},
		{4, allIndents, "a  de ", "0a.1de."},
		{4, allIndents, "a  deN", "0a.1de."},
		// Multi-line word-wrapping boundary conditions.
		{4, allIndents, "abc e", "0abc.1e."},
		{4, allIndents, "abc.e", "0abc.1e."},
		{4, allIndents, "abc efgh", "0abc.1efgh."},
		{4, allIndents, "abc.efgh", "0abc.1efgh."},
		{4, allIndents, "abc efghi", "0abc.1efghi."},
		{4, allIndents, "abc.efghi", "0abc.1efghi."},
		{4, [][]int{nil}, "abc e gh", "0abc.1e gh."},
		{4, [][]int{nil}, "abc.e.gh", "0abc.1e gh."},
		{4, allIndents1, "abc e gh", "0abc.1e.2gh."},
		{4, allIndents1, "abc.e.gh", "0abc.1e.2gh."},
		{4, allIndents, "abc e ghijk", "0abc.1e.2ghijk."},
		{4, allIndents, "abc.e.ghijk", "0abc.1e.2ghijk."},
		// Verbatim lines.
		{4, allIndents, " b", "0 b."},
		{4, allIndents, "  bc", "0  bc."},
		{4, allIndents, "   bcd", "0   bcd."},
		{4, allIndents, "    bcde", "0    bcde."},
		{4, allIndents, "     bcdef", "0     bcdef."},
		{4, allIndents, "      bcdefg", "0      bcdefg."},
		{4, allIndents, " b de ghijk", "0 b de ghijk."},
		// Verbatim lines before word-wrapped lines.
		{4, allIndents, " b.vw yz", "0 b.1vw.2yz."},
		{4, allIndents, "  bc.vw yz", "0  bc.1vw.2yz."},
		{4, allIndents, "   bcd.vw yz", "0   bcd.1vw.2yz."},
		{4, allIndents, "    bcde.vw yz", "0    bcde.1vw.2yz."},
		{4, allIndents, "     bcdef.vw yz", "0     bcdef.1vw.2yz."},
		{4, allIndents, "      bcdefg.vw yz", "0      bcdefg.1vw.2yz."},
		{4, allIndents, " b de ghijk.vw yz", "0 b de ghijk.1vw.2yz."},
		// Verbatim lines after word-wrapped lines.
		{4, allIndents, "vw yz. b", "0vw.1yz.2 b."},
		{4, allIndents, "vw yz.  bc", "0vw.1yz.2  bc."},
		{4, allIndents, "vw yz.   bcd", "0vw.1yz.2   bcd."},
		{4, allIndents, "vw yz.    bcde", "0vw.1yz.2    bcde."},
		{4, allIndents, "vw yz.     bcdef", "0vw.1yz.2     bcdef."},
		{4, allIndents, "vw yz.      bcdefg", "0vw.1yz.2      bcdefg."},
		{4, allIndents, "vw yz. b de ghijk", "0vw.1yz.2 b de ghijk."},
		// Verbatim lines between word-wrapped lines.
		{4, allIndents, "vw yz. b.mn pq", "0vw.1yz.2 b.2mn.2pq."},
		{4, allIndents, "vw yz.  bc.mn pq", "0vw.1yz.2  bc.2mn.2pq."},
		{4, allIndents, "vw yz.   bcd.mn pq", "0vw.1yz.2   bcd.2mn.2pq."},
		{4, allIndents, "vw yz.    bcde.mn pq", "0vw.1yz.2    bcde.2mn.2pq."},
		{4, allIndents, "vw yz.     bcdef.mn pq", "0vw.1yz.2     bcdef.2mn.2pq."},
		{4, allIndents, "vw yz.      bcdefg.mn pq", "0vw.1yz.2      bcdefg.2mn.2pq."},
		{4, allIndents, "vw yz. b de ghijk.mn pq", "0vw.1yz.2 b de ghijk.2mn.2pq."},
		// Multi-paragraphs via explicit U+2029, and multi-newline.
		{4, allIndents, "ab de ghPij lm op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab.de.ghPij.lm.op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab de gh Pij lm op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab.de.gh Pij.lm.op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab de ghNNij lm op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab.de.ghNNij.lm.op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab de ghNNNij lm op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab.de.ghNNNij.lm.op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab de gh N Nij lm op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab.de.gh N Nij.lm.op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab de gh N N Nij lm op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab.de.gh N N Nij.lm.op", "0ab.1de.2gh.:0ij.1lm.2op."},
		// Special-case /r/n is a single EOL, but may be combined.
		{4, allIndents, "ab de ghRNij lm op", "0ab.1de.2gh.2ij.2lm.2op."},
		{4, allIndents, "ab.de.ghRNij.lm.op", "0ab.1de.2gh.2ij.2lm.2op."},
		{4, allIndents, "ab de gh RNij lm op", "0ab.1de.2gh.2ij.2lm.2op."},
		{4, allIndents, "ab.de.gh RNij.lm.op", "0ab.1de.2gh.2ij.2lm.2op."},
		{4, allIndents, "ab de ghRNRNij lm op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab.de.ghRNRNij.lm.op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab de gh RN RNij lm op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab.de.gh RN RNij.lm.op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab de ghR Nij lm op", "0ab.1de.2gh.:0ij.1lm.2op."},
		{4, allIndents, "ab.de.ghR Nij.lm.op", "0ab.1de.2gh.:0ij.1lm.2op."},
		// Line separator via explicit U+2028 ends lines, but not paragraphs.
		{4, allIndents, "aLcd", "0a.1cd."},
		{4, allIndents, "a Lcd", "0a.1cd."},
		{4, allIndents, "aLLcd", "0a.1cd."},
		{4, allIndents, "a LLcd", "0a.1cd."},
		// 0 width ends up with one word per line, except verbatim lines.
		{0, allIndents, "a c e", "0a.1c.2e."},
		{0, allIndents, "a cd fghij", "0a.1cd.2fghij."},
		{0, allIndents, "a. cd fghij.l n", "0a.1 cd fghij.2l.2n."},
		// -1 width ends up with all words on same line, except verbatim lines.
		{-1, allIndents, "a c e", "0a c e."},
		{-1, allIndents, "a cd fghij", "0a cd fghij."},
		{-1, allIndents, "a. cd fghij.l n", "0a.1 cd fghij.2l n."},
	}
	for _, test := range tests {
		// Run with a variety of chunk sizes.
		for _, sizes := range [][]int{nil, {1}, {2}, {1, 2}, {2, 1}} {
			// Run with a variety of line terminators and paragraph separators.
			for _, lp := range []lp{{}, {"\n", "\n"}, {"L", "P"}, {"LLL", "PPP"}} {
				// Run with a variety of indents.
				if len(test.Indents) == 0 {
					t.Errorf("%d %q %q has no indents, use [][]int{nil} rather than nil", test.Width, test.In, test.Want)
				}
				for _, indents := range test.Indents {
					var buf bytes.Buffer
					w := newUTF8LineWriter(t, &buf, test.Width, lp, indents)
					lineWriterWriteFlush(t, w, xlateIn(test.In), sizes)
					if got, want := buf.String(), xlateWant(test.Want, lp, indents); got != want {
						t.Errorf("%q sizes:%v lp:%q indents:%v got %q, want %q", test.In, sizes, lp, indents, got, want)
					}
				}
			}
		}
	}
}

// xlateIn translates our test.In pattern into an actual input string to feed
// into the writer.  The point is to make it easy to specify the various control
// sequences in a single character, so it's easier to understand.
func xlateIn(text string) string {
	text = strings.Replace(text, "F", "\f", -1)
	text = strings.Replace(text, "N", "\n", -1)
	text = strings.Replace(text, ".", "\n", -1) // Also allow . for easier reading
	text = strings.Replace(text, "R", "\r", -1)
	text = strings.Replace(text, "V", "\v", -1)
	text = strings.Replace(text, "L", "\u2028", -1)
	text = strings.Replace(text, "P", "\u2029", -1)
	return text
}

// xlateWant translates our test.Want pattern into an actual expected string to
// compare against the output.  The point is to make it easy to read and write
// the expected patterns, and to make it easy to test various indents.
func xlateWant(text string, lp lp, indents []int) string {
	// Dot "." and colon ":" in the want string indicate line terminators and
	// paragraph separators, respectively.
	line := lp.line
	if line == "" {
		line = "\n"
	}
	text = strings.Replace(text, ".", line, -1)
	para := lp.para
	if para == "" {
		para = "\n"
	}
	text = strings.Replace(text, ":", para, -1)
	// The numbers in the want string indicate paragraph line numbers, to make it
	// easier to automatically replace for various indent configurations.
	switch len(indents) {
	case 0:
		text = strings.Replace(text, "0", "", -1)
		text = strings.Replace(text, "1", "", -1)
		text = strings.Replace(text, "2", "", -1)
	case 1:
		text = strings.Replace(text, "0", spaces(indents[0]), -1)
		text = strings.Replace(text, "1", spaces(indents[0]), -1)
		text = strings.Replace(text, "2", spaces(indents[0]), -1)
	case 2:
		text = strings.Replace(text, "0", spaces(indents[0]), -1)
		text = strings.Replace(text, "1", spaces(indents[1]), -1)
		text = strings.Replace(text, "2", spaces(indents[1]), -1)
	case 3:
		text = strings.Replace(text, "0", spaces(indents[0]), -1)
		text = strings.Replace(text, "1", spaces(indents[1]), -1)
		text = strings.Replace(text, "2", spaces(indents[2]), -1)
	}
	return text
}

func spaces(count int) string {
	return strings.Repeat(" ", count)
}

func newUTF8LineWriter(t *testing.T, buf io.Writer, width int, lp lp, indents []int) *LineWriter {
	w := NewUTF8LineWriter(buf, width)
	if lp.line != "" || lp.para != "" {
		if err := w.SetLineTerminator(lp.line); err != nil {
			t.Errorf("SetLineTerminator(%q) got %v, want nil", lp.line, err)
		}
		if err := w.SetParagraphSeparator(lp.para); err != nil {
			t.Errorf("SetParagraphSeparator(%q) got %v, want nil", lp.para, err)
		}
	}
	if indents != nil {
		indentStrs := make([]string, len(indents))
		for ix, indent := range indents {
			indentStrs[ix] = spaces(indent)
		}
		if err := w.SetIndents(indentStrs...); err != nil {
			t.Errorf("SetIndents(%v) got %v, want nil", indentStrs, err)
		}
	}
	return w
}

func lineWriterWriteFlush(t *testing.T, w *LineWriter, text string, sizes []int) {
	// Write chunks of different sizes until we've exhausted the input.
	remain := text
	for ix := 0; len(remain) > 0; ix++ {
		var chunk []byte
		chunk, remain = nextChunk(remain, sizes, ix)
		got, err := w.Write(chunk)
		if want := len(chunk); got != want || err != nil {
			t.Errorf("%q Write(%q) got (%d,%v), want (%d,nil)", text, chunk, got, err, want)
		}
	}
	// Flush the writer.
	if err := w.Flush(); err != nil {
		t.Errorf("%q Flush() got %v, want nil", text, err)
	}
}
