// Shared fixtures for the integration tests in this directory. Each test
// binary compiles its own copy of this module and only sees the helpers it
// actually uses as "live", so the rest trip the `dead_code` lint —
// `#![allow(dead_code)]` is the standard fix for shared `tests/common/`.
#![ allow( dead_code ) ]

use ltk::test_support::{ LaidOutWidget, WidgetHandlers };
use ltk::{ CursorShape, Rect };

/// Build a synthetic [`LaidOutWidget`] with no handlers. The `flat_idx` is
/// what most tree lookups key on; `rect` is what hit testing keys on.
/// Defaults to `keyboard_focusable = true` so existing Tab-navigation tests
/// keep their meaning — the entry behaves like a typical Button.
pub fn lw_none( flat_idx: usize, rect: Rect ) -> LaidOutWidget<()>
{
	LaidOutWidget
	{
		rect,
		flat_idx,
		id:                 None,
		paint_rect:         rect,
		handlers:           WidgetHandlers::None,
		keyboard_focusable: true,
		cursor:             CursorShape::Default,
		tooltip:            None,
		accessible_label:   None,
		is_live_region:     false,
	}
}

/// Variant: synthetic Button entry that emits `()` on press.
pub fn lw_button( flat_idx: usize, rect: Rect ) -> LaidOutWidget<()>
{
	LaidOutWidget
	{
		rect,
		flat_idx,
		id:                 None,
		paint_rect:         rect,
		handlers:           WidgetHandlers::Button { on_press: Some( () ), on_long_press: None, on_drag_start: None, on_escape: None, repeating: false },
		keyboard_focusable: true,
		cursor:             CursorShape::Pointer,
		tooltip:            None,
		accessible_label:   None,
		is_live_region:     false,
	}
}

/// Variant: synthetic interactive-but-not-focusable entry, modelling chrome
/// such as `WindowButton`. Used by the Tab-navigation tests that verify the
/// projection step skips these.
pub fn lw_chrome( flat_idx: usize, rect: Rect ) -> LaidOutWidget<()>
{
	LaidOutWidget
	{
		rect,
		flat_idx,
		id:                 None,
		paint_rect:         rect,
		handlers:           WidgetHandlers::WindowButton { on_press: Some( () ) },
		keyboard_focusable: false,
		cursor:             CursorShape::Pointer,
		tooltip:            None,
		accessible_label:   None,
		is_live_region:     false,
	}
}

pub fn rect( x: f32, y: f32, w: f32, h: f32 ) -> Rect
{
	Rect { x, y, width: w, height: h }
}
