local M = {}

function M.new()
	return {
		overlay_running = false,
		texthooker_running = false,
		overlay_process = nil,
		binary_available = false,
		binary_path = nil,
		detected_backend = nil,
		hover_highlight = {
			revision = -1,
			payload = nil,
			saved_sub_visibility = nil,
			saved_secondary_sub_visibility = nil,
			overlay_active = false,
			cached_ass = nil,
			clear_timer = nil,
			last_hover_update_ts = 0,
		},
		auto_play_ready_gate_armed = false,
		auto_play_ready_should_resume_playback = false,
		auto_play_ready_timeout = nil,
		auto_play_ready_osd_timer = nil,
		auto_play_ready_signal_seen = false,
		auto_play_ready_initial_pause_ownership_consumed = false,
		overlay_loading_osd_active = false,
		overlay_loading_osd_timer = nil,
		overlay_loading_osd_deadline = nil,
		overlay_loading_osd_frame = 1,
		pending_visible_overlay_hide_timer = nil,
		pending_visible_overlay_hide_generation = 0,
		suppress_ready_overlay_restore = false,
		force_ready_overlay_restore = false,
		visible_overlay_requested = nil,
		last_visible_overlay_toggle_time = nil,
		current_media_identity = nil,
		current_media_title = nil,
		pending_reload_media_identity = nil,
		pending_reload_media_title = nil,
		pending_reload_reason = nil,
		app_managed_playback_pending = false,
		app_managed_playback_active = false,
		auto_start_retry_generation = 0,
		session_binding_generation = 0,
		session_binding_names = {},
		session_numeric_binding_names = {},
		session_numeric_selection = nil,
	}
end

return M
