package table

// renderHint has hints for the Render*() logic
type renderHint struct {
	isAutoIndexColumn bool // auto-index column?
	isAutoIndexRow    bool // auto-index row?
	isBorderBottom    bool // bottom-border?
	isBorderTop       bool // top-border?
	isFirstRow        bool // first-row of header/footer/regular-rows?
	isFooterRow       bool // footer row?
	isHeaderRow       bool // header row?
	isLastLineOfRow   bool // last-line of the current row?
	isLastRow         bool // last-row of header/footer/regular-rows?
	isSeparatorRow    bool // separator row?
	isTitleRow        bool // title row?
	rowLineNumber     int  // the line number for a multi-line row
	rowNumber         int  // the row number/index
	separatorType     separatorType
}

func (h *renderHint) isBorderOrSeparator() bool {
	return h.isBorderTop || h.isSeparatorRow || h.isBorderBottom
}

func (h *renderHint) isRegularRow() bool {
	return !h.isHeaderRow && !h.isFooterRow
}

func (h *renderHint) isRegularNonSeparatorRow() bool {
	return !h.isHeaderRow && !h.isFooterRow && !h.isSeparatorRow
}

func (h *renderHint) isHeaderOrFooterSeparator() bool {
	return h.isSeparatorRow && !h.isBorderBottom && !h.isBorderTop &&
		((h.isHeaderRow && !h.isLastRow) || (h.isFooterRow && (!h.isFirstRow || h.rowNumber > 0)))
}

func (h *renderHint) isLastLineOfLastRow() bool {
	return h.isLastLineOfRow && h.isLastRow
}

type renderMode string

const (
	renderModeDefault  renderMode = "default"
	renderModeCSV      renderMode = "csv"
	renderModeMarkdown renderMode = "markdown"
	renderModeTSV      renderMode = "tsv"
	renderModeHTML     renderMode = "html"
)
