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

namespace Hafenstudios\Leadlotse\Fields\Types;

use Hafenstudios\Leadlotse\Fields\AbstractFieldType;

defined( 'ABSPATH' ) || exit;

/**
 * Einwilligungs-Feld (DSGVO). Immer Pflicht, wenn vorhanden; der zugehoerige
 * Einwilligungstext samt Version wird beim Submit im Core-Consent-Log
 * protokolliert (D6). Bei DSGVO-relevanten Zwecken nicht entfernbar, nur der
 * Text ist anpassbar (UX-KONZEPT Abschnitt 4).
 */
final class ConsentField extends AbstractFieldType {

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

	/**
	 * @param mixed                $value Rohwert.
	 * @param array<string, mixed> $field Felddefinition.
	 * @return string
	 */
	public function sanitize( $value, array $field ) {
		if ( is_array( $value ) ) {
			$value = reset( $value );
		}
		return in_array( strtolower( (string) $value ), array( '1', 'true', 'on', 'yes', 'ja' ), true ) ? '1' : '';
	}

	/**
	 * Einwilligung ist immer Pflicht.
	 *
	 * @param mixed                $value Wert.
	 * @param array<string, mixed> $field Felddefinition.
	 * @return string|null
	 */
	public function validate( $value, array $field ): ?string {
		if ( '1' !== $value ) {
			return __( 'Bitte bestaetigen Sie die Einwilligung zur Datenverarbeitung. Ohne Einwilligung koennen wir Ihre Anfrage nicht entgegennehmen.', 'leadlotse' );
		}
		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']     = true;
		$data['consent_text'] = (string) ( $field['consent_text'] ?? '' );
		$data['text_version'] = (string) ( $field['text_version'] ?? '1' );
		return $data;
	}
}
