package readline

// Character codes
const (
	charCtrlA = iota + 1
	charCtrlB
	charCtrlC
	charEOF
	charCtrlE
	charCtrlF
	charCtrlG
	charBackspace // ISO 646
	charTab
	charCtrlJ
	charCtrlK
	charCtrlL
	charCtrlM
	charCtrlN
	charCtrlO
	charCtrlP
	charCtrlQ
	charCtrlR
	charCtrlS
	charCtrlT
	charCtrlU
	charCtrlV
	charCtrlW
	charCtrlX
	charCtrlY
	charCtrlZ
	charEscape
	charCtrlSlash             // ^\
	charCtrlCloseSquare       // ^]
	charCtrlHat               // ^^
	charCtrlUnderscore        // ^_
	charBackspace2      = 127 // ASCII 1963
)

// Escape sequences
var (
	seqUp           = string([]byte{27, 91, 65})
	seqDown         = string([]byte{27, 91, 66})
	seqForwards     = string([]byte{27, 91, 67})
	seqBackwards    = string([]byte{27, 91, 68})
	seqHome         = string([]byte{27, 91, 72})
	seqHomeSc       = string([]byte{27, 91, 49, 126})
	seqEnd          = string([]byte{27, 91, 70})
	seqEndSc        = string([]byte{27, 91, 52, 126})
	seqDelete       = string([]byte{27, 91, 51, 126})
	seqDelete2      = string([]byte{27, 91, 80})
	seqCtrlDelete   = string([]byte{27, 91, 51, 59, 53, 126})
	seqCtrlDelete2  = string([]byte{27, 91, 77})
	seqAltDelete    = string([]byte{27, 91, 51, 59, 51, 126})
	seqShiftTab     = string([]byte{27, 91, 90})
	seqAltQuote     = string([]byte{27, 34})  // Added for showing registers ^["
	seqAltB         = string([]byte{27, 98})
	seqAltD         = string([]byte{27, 100})
	seqAltF         = string([]byte{27, 102})
	seqAltR         = string([]byte{27, 114}) // Used for alternative history
	seqAltBackspace = string([]byte{27, 127})
)

const (
	seqPosSave    = "\x1b[s"
	seqPosRestore = "\x1b[u"

	seqClearLineAfer    = "\x1b[0K"
	seqClearLineBefore  = "\x1b[1K"
	seqClearLine        = "\x1b[2K"
	seqClearScreenBelow = "\x1b[0J"
	seqClearScreen      = "\x1b[2J" // Clears screen fully
	seqCursorTopLeft    = "\x1b[H"  // Clears screen and places cursor on top-left

	seqGetCursorPos = "\x1b6n" // response: "\x1b{Line};{Column}R"

	seqCtrlLeftArrow  = "\x1b[1;5D"
	seqCtrlRightArrow = "\x1b[1;5C"

	// seqAltQuote = "\x1b\"" // trigger registers list
)

// Text effects
const (
	seqReset      = "\x1b[0m"
	seqBold       = "\x1b[1m"
	seqUnderscore = "\x1b[4m"
	seqBlink      = "\x1b[5m"
	seqInvert     = "\x1b[7m"
)

// Text colours
const (
	seqFgBlack   = "\x1b[30m"
	seqFgRed     = "\x1b[31m"
	seqFgGreen   = "\x1b[32m"
	seqFgYellow  = "\x1b[33m"
	seqFgBlue    = "\x1b[34m"
	seqFgMagenta = "\x1b[35m"
	seqFgCyan    = "\x1b[36m"
	seqFgWhite   = "\x1b[37m"

	seqFgBlackBright   = "\x1b[1;30m"
	seqFgRedBright     = "\x1b[1;31m"
	seqFgGreenBright   = "\x1b[1;32m"
	seqFgYellowBright  = "\x1b[1;33m"
	seqFgBlueBright    = "\x1b[1;34m"
	seqFgMagentaBright = "\x1b[1;35m"
	seqFgCyanBright    = "\x1b[1;36m"
	seqFgWhiteBright   = "\x1b[1;37m"
)

// Background colours
const (
	seqBgBlack   = "\x1b[40m"
	seqBgRed     = "\x1b[41m"
	seqBgGreen   = "\x1b[42m"
	seqBgYellow  = "\x1b[43m"
	seqBgBlue    = "\x1b[44m"
	seqBgMagenta = "\x1b[45m"
	seqBgCyan    = "\x1b[46m"
	seqBgWhite   = "\x1b[47m"

	seqBgBlackBright   = "\x1b[1;40m"
	seqBgRedBright     = "\x1b[1;41m"
	seqBgGreenBright   = "\x1b[1;42m"
	seqBgYellowBright  = "\x1b[1;43m"
	seqBgBlueBright    = "\x1b[1;44m"
	seqBgMagentaBright = "\x1b[1;45m"
	seqBgCyanBright    = "\x1b[1;46m"
	seqBgWhiteBright   = "\x1b[1;47m"
)

// Xterm 256 colors
const (
	seqCtermFg255 = "\033[48;5;255m"
)