package pterm_test

import (
	"github.com/MarvinJWendt/testza"
	"github.com/pterm/pterm"
	"testing"
)

func TestDisableDebugMessages(t *testing.T) {
	pterm.PrintDebugMessages = true
	pterm.DisableDebugMessages()
	testza.AssertFalse(t, pterm.PrintDebugMessages)
}

func TestEnableDebugMessages(t *testing.T) {
	pterm.EnableDebugMessages()
	testza.AssertTrue(t, pterm.PrintDebugMessages)
}

func TestDisableOutput(t *testing.T) {
	pterm.DisableOutput()
	testza.AssertFalse(t, pterm.Output)
}

func TestEnableOutput(t *testing.T) {
	pterm.DisableOutput()
	pterm.EnableOutput()
	testza.AssertTrue(t, pterm.Output)
}

func TestDisableStyling(t *testing.T) {
	pterm.RawOutput = false
	pterm.DisableStyling()
	testza.AssertTrue(t, pterm.RawOutput)
}

func TestEnableStyling(t *testing.T) {
	pterm.RawOutput = true
	pterm.EnableStyling()
	testza.AssertFalse(t, pterm.RawOutput)
}

func TestInterfaceImplementation(t *testing.T) {
	// If a printer doesn't fit into the slice, the printer doesn't has the right interface anymore.
	_ = []pterm.TextPrinter{&pterm.DefaultBasicText, pterm.DefaultBox, pterm.DefaultCenter, &pterm.DefaultHeader, &pterm.DefaultParagraph, &pterm.Info, &pterm.DefaultSection, pterm.FgRed, pterm.NewRGB(0, 0, 0)}
	_ = []pterm.LivePrinter{pterm.DefaultProgressbar, &pterm.DefaultSpinner}
	_ = []pterm.RenderPrinter{pterm.DefaultBarChart, pterm.DefaultBigText, pterm.DefaultBulletList, pterm.DefaultPanel, pterm.DefaultTable, pterm.DefaultTree}
}

func TestRecalculateTerminalSize(t *testing.T) {
	// save existing values
	prevBarChartWidth := pterm.DefaultBarChart.Width
	prevBarChartHeight := pterm.DefaultBarChart.Height
	prevParagraphMaxWidth := pterm.DefaultParagraph.MaxWidth
	w := pterm.GetTerminalWidth()
	h := pterm.GetTerminalHeight()
	// double the terminal size
	pterm.SetForcedTerminalSize(w*2, h*2)
	// assert the values doubled
	testza.AssertEqual(t, prevBarChartWidth*2, pterm.DefaultBarChart.Width)
	testza.AssertEqual(t, prevBarChartHeight*2, pterm.DefaultBarChart.Height)
	testza.AssertEqual(t, prevParagraphMaxWidth*2, pterm.DefaultParagraph.MaxWidth)
	// revert the terminal size
	pterm.SetForcedTerminalSize(w, h)
}