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

namespace Hafenstudios\Leadlotse\WhatsApp;

use Hafenstudios\Leadlotse\Fields\ConditionalLogic;

defined( 'ABSPATH' ) || exit;

/**
 * Sammelt die WhatsApp-Opt-ins eines Submits ein: fuer jedes sichtbare
 * Telefon-Feld mit aktivem Opt-in, das ausgefuellt ist und dessen technische
 * Opt-in-Checkbox (`_wa_{feldid}`) angehakt wurde.
 *
 * Reine, testbare Logik. Der Default-Text ist hier zentralisiert, damit
 * Renderer und Consent-Aufzeichnung denselben Wortlaut verwenden.
 */
final class OptinCollector {

	/**
	 * Ermittelt die WhatsApp-Opt-ins.
	 *
	 * @param array<int, array<string, mixed>> $fields     Felddefinitionen.
	 * @param array<string, mixed>             $input      Eingereichte Rohdaten (inkl. `_wa_*`).
	 * @param ConditionalLogic                 $conditions Conditional-Logic-Service.
	 * @param array<string, mixed>             $sanitized  Bereinigte Feldwerte.
	 * @return array<int, array{field_id:string,text:string}>
	 */
	public static function collect( array $fields, array $input, ConditionalLogic $conditions, array $sanitized ): array {
		$out = array();
		foreach ( $fields as $field ) {
			if ( 'phone' !== (string) ( $field['type'] ?? '' ) ) {
				continue;
			}
			if ( empty( $field['whatsapp_optin'] ) ) {
				continue;
			}
			$id = (string) ( $field['id'] ?? '' );
			if ( '' === $id ) {
				continue;
			}
			// Verborgene Felder zaehlen nicht (gleiche Regel wie bei der Validierung).
			if ( ! $conditions->is_visible( $field, $sanitized ) ) {
				continue;
			}
			// Ohne Telefonnummer gibt es keinen WhatsApp-Kanal.
			if ( '' === (string) ( $sanitized[ $id ] ?? '' ) ) {
				continue;
			}
			// Checkbox muss aktiv angehakt sein.
			if ( '1' !== (string) ( $input[ '_wa_' . $id ] ?? '' ) ) {
				continue;
			}

			$text = (string) ( $field['whatsapp_optin_text'] ?? '' );
			if ( '' === $text ) {
				$text = self::default_optin_text();
			}

			$out[] = array(
				'field_id' => $id,
				'text'     => $text,
			);
		}

		return $out;
	}

	/**
	 * Default-Wortlaut des Opt-ins (zentral fuer Renderer und Consent-Log).
	 *
	 * @return string
	 */
	public static function default_optin_text(): string {
		return __( 'Sie duerfen mir zu dieser Anfrage auch per WhatsApp antworten.', 'leadlotse' );
	}
}
