<?php
/** WordPress-Adminsteuerung für native WPForms-Abilities. */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

function wpagent_companion_wpforms_access_handler(): void {
	if ( ! current_user_can( 'manage_options' ) ) {
		wp_die( esc_html__( 'Keine Berechtigung.', 'wp-agent-companion' ) );
	}
	check_admin_referer( 'wpagent_companion_wpforms_access' );
	$mode    = isset( $_POST['wpforms_access_mode'] ) ? sanitize_key( wp_unslash( $_POST['wpforms_access_mode'] ) ) : '';
	$group   = isset( $_POST['wpforms_access_group'] ) ? sanitize_key( wp_unslash( $_POST['wpforms_access_group'] ) ) : '';
	$user_id = isset( $_POST['connection_user'] ) ? absint( $_POST['connection_user'] ) : 0;
	if ( ! in_array( $mode, array( 'enable', 'disable' ), true ) || ! in_array( $group, array( 'forms', 'entries', 'write' ), true ) ) {
		wp_die( esc_html__( 'Ungültige Aktion.', 'wp-agent-companion' ), esc_html__( 'WPForms-Rechte', 'wp-agent-companion' ), array( 'response' => 400 ) );
	}
	$result = wpagent_companion_wpforms_set_user_access( $user_id, $group, 'enable' === $mode );
	if ( is_wp_error( $result ) ) {
		wp_safe_redirect( add_query_arg( array( 'page' => 'wpagently-connect', 'wpforms_access' => 'error' ), admin_url( 'admin.php' ) ) );
		exit;
	}
	wp_safe_redirect( add_query_arg( array( 'page' => 'wpagently-connect', 'wpforms_access' => 'enable' === $mode ? 'enabled' : 'disabled' ), admin_url( 'admin.php' ) ) );
	exit;
}
add_action( 'admin_post_wpagently_wpforms_access', 'wpagent_companion_wpforms_access_handler' );

/**
 * @param array<int,array{id:int,login:string,name:string,roles:string[]}> $users Sichere Verbindungsnutzer.
 */
function wpagent_companion_wpforms_connection_controls( array $users, int $selected_user_id ): void {
	$status = wpagent_companion_wpforms_integration_status();
	$has_tracked_grants = ! empty( wpagent_companion_wpforms_capability_grants() );
	if ( ( ! $status['detected'] && ! $has_tracked_grants ) || empty( $users ) ) {
		return;
	}
	$groups = array(
		'forms'   => array(
			'title'       => __( 'Formulare lesen', 'wp-agent-companion' ),
			'description' => __( 'Erlaubt dem Agent-Nutzer, WPForms-Formulare und ihre sicheren Feldeinstellungen über die nativen Lese-Abilities abzurufen.', 'wp-agent-companion' ),
			'enable'      => __( 'Formularrechte aktivieren', 'wp-agent-companion' ),
		),
		'entries' => array(
			'title'       => __( 'Einträge lesen', 'wp-agent-companion' ),
			'description' => __( 'Einträge können Namen, E-Mail-Adressen, IP-Adressen und weitere personenbezogene Daten enthalten. Aktiviere dieses Recht nur bei einem konkreten Bedarf. WPForms Lite stellt keine Eintrags-Abilities bereit.', 'wp-agent-companion' ),
			'enable'      => __( 'Eintragsrechte aktivieren', 'wp-agent-companion' ),
		),
		'write'   => array(
			'title'       => __( 'Formulare bearbeiten', 'wp-agent-companion' ),
			'description' => __( 'Erlaubt Erstellen sowie begrenzte Feld- und Einstellungsänderungen. Der separate Schreibschalter unter WPForms > Werkzeuge > AI MCP und die Freigabe im wpagently-Kontrollzentrum bleiben zusätzlich erforderlich.', 'wp-agent-companion' ),
			'enable'      => __( 'Schreibrechte aktivieren', 'wp-agent-companion' ),
		),
	);
	?>
	<h2><?php esc_html_e( 'WPForms für den Agent-Nutzer', 'wp-agent-companion' ); ?></h2>
	<p><?php esc_html_e( 'WPForms Lite beschränkt seine nativen Abilities standardmäßig auf Administratoren. wpagently vergibt stattdessen drei eng begrenzte, einzeln widerrufbare Rechte an den sicheren Redakteur. Administratorrechte werden nie ergänzt.', 'wp-agent-companion' ); ?></p>
	<?php foreach ( $groups as $group => $definition ) : ?>
		<?php $group_available = ! empty( $status[ 'registered_' . $group ] ); ?>
		<h3><?php echo esc_html( $definition['title'] ); ?></h3>
		<p><?php echo esc_html( $definition['description'] ); ?></p>
		<form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
			<input type="hidden" name="action" value="wpagently_wpforms_access">
			<input type="hidden" name="wpforms_access_group" value="<?php echo esc_attr( $group ); ?>">
			<?php wp_nonce_field( 'wpagent_companion_wpforms_access' ); ?>
			<label for="wpforms_<?php echo esc_attr( $group ); ?>_connection_user"><strong><?php esc_html_e( 'Sicherer Agent-Nutzer', 'wp-agent-companion' ); ?></strong></label>
			<select id="wpforms_<?php echo esc_attr( $group ); ?>_connection_user" name="connection_user" required>
				<?php foreach ( $users as $user ) : ?>
					<?php $state = wpagent_companion_wpforms_user_access( (int) $user['id'], $group ); ?>
					<option value="<?php echo esc_attr( (string) $user['id'] ); ?>" <?php selected( $selected_user_id, $user['id'] ); ?>><?php echo esc_html( $user['name'] . ' (' . $user['login'] . ')' . ( ! is_wp_error( $state ) && $state['enabled'] ? ' · ' . __( 'aktiv', 'wp-agent-companion' ) : '' ) ); ?></option>
				<?php endforeach; ?>
			</select>
			<p>
				<button class="button button-secondary" type="submit" name="wpforms_access_mode" value="enable" <?php disabled( ! $group_available ); ?>><?php echo esc_html( $definition['enable'] ); ?></button>
				<button class="button" type="submit" name="wpforms_access_mode" value="disable"><?php esc_html_e( 'Von wpagently ergänztes Recht entfernen', 'wp-agent-companion' ); ?></button>
			</p>
		</form>
	<?php endforeach; ?>
	<?php
}
