<?php
defined( 'ABSPATH' ) || die;

/**
 * The input list walker for checkbox and radio list fields.
 */
class RWMB_Walker_Input_List extends RWMB_Walker_Base {
	/**
	 * Starts the list before the elements are added.
	 *
	 * @param string $output Passed by reference. Used to append additional content.
	 * @param int    $depth  Depth of the item.
	 * @param array  $args   An array of additional arguments.
	 */
	public function start_lvl( &$output, $depth = 0, $args = [] ) {
		$output .= '<fieldset class="rwmb-input-list">';
	}

	/**
	 * Ends the list of after the elements are added.
	 *
	 * @param string $output Passed by reference. Used to append additional content.
	 * @param int    $depth  Depth of the item.
	 * @param array  $args   An array of additional arguments.
	 */
	public function end_lvl( &$output, $depth = 0, $args = [] ) {
		$output .= '</fieldset>';
	}

	/**
	 * Start the element output.
	 *
	 * @param string $output            Passed by reference. Used to append additional content.
	 * @param object $object            The data object.
	 * @param int    $depth             Depth of the item.
	 * @param array  $args              An array of additional arguments.
	 * @param int    $current_object_id ID of the current item.
	 */
	public function start_el( &$output, $object, $depth = 0, $args = [], $current_object_id = 0 ) {
		$attributes = RWMB_Field::call( 'get_attributes', $this->field, $object->value );

		$output .= sprintf(
			'<label><input %s %s>%s</label>',
			RWMB_Field::render_attributes( $attributes ),
			// phpcs:ignore WordPress.PHP.StrictInArray.MissingTrueStrict
			checked( in_array( $object->value, $this->meta ), true, false ),
			$object->label
		);
	}
}
