<?php
/**
 * @package Hafenstudios\Leadlotse
 */

namespace Hafenstudios\Leadlotse\Fields\Types;

use Hafenstudios\Leadlotse\Fields\AbstractFieldType;

defined( 'ABSPATH' ) || exit;

/**
 * Hidden-Feld, primaer fuer UTM-/Quellen-Erfassung (Attribution, BAUPLAN 15).
 * Der Wert wird clientseitig befuellt (z.B. utm_source aus der URL) und
 * serverseitig strikt gekuerzt und bereinigt. Nie Pflicht, nie sichtbar.
 */
final class HiddenField extends AbstractFieldType {

	public function key(): string {
		return 'hidden';
	}

	/**
	 * @param mixed                $value Rohwert.
	 * @param array<string, mixed> $field Felddefinition.
	 * @return string
	 */
	public function sanitize( $value, array $field ) {
		$value = sanitize_text_field( (string) ( is_array( $value ) ? '' : $value ) );
		return mb_substr( $value, 0, 200 );
	}

	/**
	 * Hidden-Felder erzeugen nie Validierungsfehler.
	 *
	 * @param mixed                $value Wert.
	 * @param array<string, mixed> $field Felddefinition.
	 * @return string|null
	 */
	public function validate( $value, array $field ): ?string {
		return null;
	}

	/**
	 * @param array<string, mixed> $field Felddefinition.
	 * @return array<string, mixed>
	 */
	public function render_data( array $field ): array {
		$data             = parent::render_data( $field );
		$data['required'] = false;
		// Welcher Query-Parameter clientseitig uebernommen wird (z.B. utm_source).
		$data['capture'] = sanitize_key( (string) ( $field['capture'] ?? '' ) );
		return $data;
	}
}
