package message

import (
	"fmt"
	"testing"
)

func TestThemePalette(t *testing.T) {
	var expected, actual string

	palette := readableColors256()
	color := palette.Get(5)
	if color == nil {
		t.Fatal("Failed to return a color from palette.")
	}

	actual = color.String()
	expected = "38;05;5"
	if actual != expected {
		t.Errorf("Got: `%s`; Expected: `%s`", actual, expected)
	}

	actual = color.Format("foo")
	expected = "\033[38;05;5mfoo\033[0m"
	if actual != expected {
		t.Errorf("Got: `%s`; Expected: `%s`", actual, expected)
	}

	actual = palette.Get(palette.Len() + 1).String()
	expected = fmt.Sprintf("38;05;%d", 2)
	if actual != expected {
		t.Errorf("Got: `%s`; Expected: `%s`", actual, expected)
	}

}

func TestTheme(t *testing.T) {
	var expected, actual string

	colorTheme := Themes[0]
	color := colorTheme.sys
	if color == nil {
		t.Fatal("Sys color should not be empty for first theme.")
	}

	actual = color.Format("foo")
	expected = "\033[38;05;8mfoo\033[0m"
	if actual != expected {
		t.Errorf("Got: `%s`; Expected: `%s`", actual, expected)
	}

	actual = colorTheme.ColorSys("foo")
	if actual != expected {
		t.Errorf("Got: `%s`; Expected: `%s`", actual, expected)
	}

	u := NewUser(SimpleId("foo"))
	u.colorIdx = 4
	actual = colorTheme.ColorName(u)
	expected = "\033[38;05;4mfoo\033[0m"
	if actual != expected {
		t.Errorf("Got: `%s`; Expected: `%s`", actual, expected)
	}

	msg := NewPublicMsg("hello", u)
	actual = msg.Render(&colorTheme)
	expected = "\033[38;05;4mfoo\033[0m: hello"
	if actual != expected {
		t.Errorf("Got: `%s`; Expected: `%s`", actual, expected)
	}
}