from __future__ import annotations

from pyratatui import Style

from pygittools.tui.keys import key
from pygittools.tui.multiline_edit import MultilineEdit


def test_insert_and_newline() -> None:
	edit = MultilineEdit()
	edit.handle_key(key("a"))
	edit.handle_key(key("b"))
	edit.handle_key(key("Enter"))
	edit.handle_key(key("c"))
	assert edit.value() == "ab\nc"
	assert edit.cursor == 4


def test_arrows_move_cursor() -> None:
	edit = MultilineEdit("hi")
	edit.handle_key(key("Left"))
	assert edit.cursor == 1
	edit.handle_key(key("Right"))
	assert edit.cursor == 2


def test_vim_letters_insert_not_move() -> None:
	edit = MultilineEdit()
	edit.handle_key(key("j"))
	edit.handle_key(key("k"))
	assert edit.value() == "jk"


def test_soft_wrap_render() -> None:
	edit = MultilineEdit("abcdefgh")
	edit._width = 3
	text = edit.render(3, 4, focused=True, style=Style(), cursor_style=Style().reversed())
	assert text.height >= 3


def test_backspace_and_delete() -> None:
	edit = MultilineEdit("ab")
	edit.handle_key(key("Left"))
	edit.handle_key(key("Delete"))
	assert edit.value() == "a"
	edit.handle_key(key("Backspace"))
	assert edit.value() == ""