from __future__ import annotations

from unittest.mock import MagicMock

import pytest

from pygittools.tui import status_bar


def test_content_height_reserves_status_row() -> None:
	assert status_bar.content_height(10) == 9
	assert status_bar.content_height(0) == 0


def test_format_line_with_hint() -> None:
	line = status_bar._format_line("left text", "q quit", 40)
	assert line.endswith("q quit")
	assert "left" in line


def test_format_line_without_hint() -> None:
	assert status_bar._format_line("hello", "", 10) == "hello     "


def test_format_line_hint_wider_than_width() -> None:
	line = status_bar._format_line("ignored", "longhint", 4)
	assert line.strip() == "long"


def test_format_line_tight_width() -> None:
	line = status_bar._format_line("left", "hint", 4)
	assert len(line) == 4


def test_draw_status_bar_skips_zero_width() -> None:
	status_bar.draw_status_bar(0, 0, "x", 0)


def test_init_status_bar_without_colors(monkeypatch: pytest.MonkeyPatch) -> None:
	monkeypatch.setattr(status_bar, "has_colors", lambda: False)
	assert status_bar.init_status_bar() == status_bar.A_REVERSE


def test_init_status_bar_with_colors(monkeypatch: pytest.MonkeyPatch) -> None:
	monkeypatch.setattr(status_bar, "has_colors", lambda: True)
	monkeypatch.setattr(status_bar, "start_color", MagicMock())
	monkeypatch.setattr(status_bar, "use_default_colors", MagicMock())
	monkeypatch.setattr(status_bar, "init_pair", MagicMock())
	attr = status_bar.init_status_bar()
	assert attr == status_bar.COLOR_PAIR(status_bar._STATUS_PAIR)