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

namespace Hafenstudios\Leadlotse\Fields\Types;

use Hafenstudios\Leadlotse\Fields\AbstractFieldType;

defined( 'ABSPATH' ) || exit;

/**
 * Mehrzeiliges Textfeld.
 */
final class TextareaField extends AbstractFieldType {

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

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

	/**
	 * @param mixed                $value Wert.
	 * @param array<string, mixed> $field Felddefinition.
	 * @return string|null
	 */
	public function validate( $value, array $field ): ?string {
		$error = $this->validate_required( $value, $field );
		if ( null !== $error ) {
			return $error;
		}
		$max = absint( $field['max_length'] ?? 5000 );
		if ( $max > 0 && mb_strlen( (string) $value ) > $max ) {
			return sprintf(
				/* translators: 1: Feldname, 2: maximale Zeichenzahl */
				__( 'Die Nachricht im Feld "%1$s" ist zu lang. Bitte kuerzen Sie den Text auf hoechstens %2$d Zeichen.', 'leadlotse' ),
				(string) ( $field['label'] ?? '' ),
				$max
			);
		}
		return null;
	}
}
