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

namespace Hafenstudios\Leadlotse\Fields\Types;

use Hafenstudios\Leadlotse\Fields\AbstractFieldType;

defined( 'ABSPATH' ) || exit;

/**
 * Datumsfeld im ISO-Format (YYYY-MM-DD, natives input type="date").
 */
final class DateField extends AbstractFieldType {

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

	/**
	 * @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;
		}
		if ( $this->is_empty( $value ) ) {
			return null;
		}

		$value = (string) $value;
		if ( ! preg_match( '/^\d{4}-\d{2}-\d{2}$/', $value ) ) {
			return sprintf(
				/* translators: %s: Feldname */
				__( 'Das Datum im Feld "%s" hat kein gueltiges Format. Bitte waehlen Sie das Datum ueber den Kalender.', 'leadlotse' ),
				(string) ( $field['label'] ?? '' )
			);
		}

		list( $year, $month, $day ) = array_map( 'intval', explode( '-', $value ) );
		if ( ! checkdate( $month, $day, $year ) ) {
			return sprintf(
				/* translators: %s: Feldname */
				__( 'Das Datum im Feld "%s" existiert nicht. Bitte pruefen Sie Tag und Monat.', 'leadlotse' ),
				(string) ( $field['label'] ?? '' )
			);
		}
		return null;
	}
}
