<?php
/**
 * Callback für die Metabox "Produktdetails".
 *
 * @param WP_Post $post Der aktuelle Post.
 */

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

function boxyfy_create_productdetails_metabox_callback( $post ) {
	$produkt_info = get_post_meta( $post->ID, 'tsprodukt_info', true );
	wp_nonce_field( 'tsprodukt_save_data', 'tsprodukt_nonce' );
	?>
	<div id="boxyfy-produkt-info-container">
		<p>
			<?php esc_html_e( 'Hier kannst Du zu einem Produkt weitere Produktdetails wie z. B. Hersteller, Gewicht, Leistung etc. anlegen. Je nachdem, ob der Filterwert ein Wort oder eine Zahl/Dezimalzahl ist, wird im', 'boxyfy' ); ?>
			<span class="boxyfy-filter-hover">
				<?php esc_html_e( 'Filter für Produktvergleiche', 'boxyfy' ); ?>
				<img src="<?php echo esc_url( plugins_url( 'assets/images/filteransicht-filtermodelle.png', BOXYFY_PLUGIN_FILE ) ); ?>" alt="<?php esc_attr_e( 'Filter-Ansicht', 'boxyfy' ); ?>">
			</span>
			<?php esc_html_e( 'automatisch eine Scrollliste oder ein praktischer Slider erscheinen.', 'boxyfy' ); ?>
		</p>
		<p><?php esc_html_e( 'Hier werden die Produktdetails angezeigt:', 'boxyfy' ); ?></p>
		<ul class="boxyfy-produkt-info-liste">
			<li><?php esc_html_e( 'Produktseite ganz oben', 'boxyfy' ); ?></li>
			<li><?php esc_html_e( 'Einzelne Produktbox (siehe auch in der Sidebar: "Produktbox-Shortcode")', 'boxyfy' ); ?></li>
		</ul>
		<p>
			<strong class="boxyfy-wichtig-hinweis"><?php esc_html_e( '### Wichtig zu wissen: ###', 'boxyfy' ); ?></strong>
			<ul class="boxyfy-produkt-info-liste">
				<li><?php esc_html_e( 'Kommazahlen bitte mit einem Punkt angeben, z.B. 144.50.', 'boxyfy' ); ?></li>
				<li><?php esc_html_e( 'Bei allen Produkten innerhalb der gleichen Produktkategorie müssen Filtertitel und Einheiten exakt gleich geschrieben sein, damit der Produktvergleich-Filter (Shortcode: siehe Boxyfy > Einstellungen > Shortcodes) korrekt funktioniert.', 'boxyfy' ); ?></li>
				<li><?php esc_html_e( 'Beispiel → Filtertitel: Lautstärke | Filterwert: 64.50 | Einheit: dB', 'boxyfy' ); ?></li>
			</ul>
		</p>

		<?php
		if ( ! empty( $produkt_info ) ) {
			foreach ( $produkt_info as $index => $info ) {
				?>
				<div class="boxyfy-produkt-info-row">
					<label><?php esc_html_e( 'Filtertitel:', 'boxyfy' ); ?></label>
					<input type="text" name="tsprodukt_info[<?php echo absint( $index ); ?>][name]" value="<?php echo esc_attr( $info['name'] ); ?>" />
					<label><?php esc_html_e( 'Filterwert:', 'boxyfy' ); ?></label>
					<input type="text" name="tsprodukt_info[<?php echo absint( $index ); ?>][value]" value="<?php echo esc_attr( $info['value'] ); ?>" />
					<label><?php esc_html_e( 'Einheit:', 'boxyfy' ); ?></label>
					<input type="text" class="boxyfy-einheit-input" name="tsprodukt_info[<?php echo absint( $index ); ?>][unit]" value="<?php echo esc_attr( isset( $info['unit'] ) ? $info['unit'] : '' ); ?>" />
					<button class="boxyfy-remove-row"><?php esc_html_e( 'Entfernen', 'boxyfy' ); ?></button>
				</div>
				<?php
			}
		}
		?>
	</div>
	<button class="boxyfy-add-row"><?php esc_html_e( 'Neues Feld hinzufügen', 'boxyfy' ); ?></button>
	<?php
}

/**
 * Speichert die Metabox-Daten für Produktdetails.
 *
 * @param int $post_id Die Post-ID.
 */
function boxyfy_save_productdetails_data( $post_id ) {
	// Prüfe, ob es sich um einen Autosave handelt.
	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
		return;
	}

	// Prüfe Berechtigungen.
	if ( ! current_user_can( 'edit_post', $post_id ) ) {
		return;
	}

	// Prüfe, ob der Nonce gesetzt und gültig ist.
	if (
		! isset( $_POST['tsprodukt_nonce'] ) ||
		! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['tsprodukt_nonce'] ) ), 'tsprodukt_save_data' )
	) {
		return;
	}

	// Hole die unbearbeiteten Produktinfos, falls vorhanden.	
	$raw_info = isset( $_POST['tsprodukt_info'] ) && is_array( $_POST['tsprodukt_info'] )
		? map_deep( wp_unslash( $_POST['tsprodukt_info'] ), 'sanitize_text_field' )
		: array();


	// Verarbeite die Produktinfos, wenn sie vorhanden sind.
	if ( ! empty( $raw_info ) ) {
		$produkt_info = array();

		foreach ( $raw_info as $index => $item ) {
			$produkt_info[] = array(
				'name'  => isset( $item['name'] )  ? sanitize_text_field( wp_unslash( $item['name'] ) )  : '',
				'value' => isset( $item['value'] ) ? sanitize_text_field( wp_unslash( $item['value'] ) ) : '',
				'unit'  => isset( $item['unit'] )  ? sanitize_text_field( wp_unslash( $item['unit'] ) )  : '',
			);
		}

		update_post_meta( $post_id, 'tsprodukt_info', $produkt_info );
	} else {
		// Falls leer oder nicht vorhanden, lösche die Metadaten.
		delete_post_meta( $post_id, 'tsprodukt_info' );
	}
}
add_action( 'save_post_boxyfy_tsprodukte', 'boxyfy_save_productdetails_data' );