<?php
/**
 * File Path: includes/interface-mbs-layout.php
 *
 * Layout contract for MBS_Archive_Reader and render pipeline.
 *
 * @package My_Book_Showroom
 * @since   4.34.0
 */

if ( ! defined( 'ABSPATH' ) ) { exit; }

interface MBS_Layout { // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedInterfaceFound -- mbs_/MBS_ prefix is correct; scanner not configured with plugin prefix

	/**
	 * Render a WP_Query result as an HTML archive row.
	 *
	 * @param WP_Query $query   Configured query. Caller has already run query.
	 * @param array    $options Optional render context (layout-specific).
	 * @return string           Escaped HTML output, or empty string on failure.
	 * @since 4.34.0
	 */
	public function render( WP_Query $query, array $options = [] ): string;
}
