<?php
/**
 * Ability: wp-agent/trash-post
 *
 * Verschiebt einen Beitrag oder eine Seite in den Papierkorb. Reversibel über
 * wp-agent/restore-post, deshalb non-destructive im Sinne der MCP-Annotation
 * (im Gegensatz zu wp-agent/delete-post mit force=true).
 *
 * @package WPAgentCompanion
 */

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

function wpagent_ability_trash_post(): array {
	return array(
		'label'               => __( 'Beitrag in den Papierkorb verschieben', 'wp-agent-companion' ),
		'description'         => __( 'Verschiebt einen Beitrag oder eine Seite in den Papierkorb und verifiziert per Re-Read, dass der Status "trash" ist. Reversibel über wp-agent/restore-post.', 'wp-agent-companion' ),
		'category'            => 'wp-agent',
		'input_schema'        => array(
			'type'       => 'object',
			'properties' => array(
				'post_id' => array( 'type' => 'integer' ),
			),
			'required'   => array( 'post_id' ),
		),
		'output_schema'       => array(
			'type'       => 'object',
			'properties' => array(
				'post_id'  => array( 'type' => 'integer' ),
				'status'   => array( 'type' => 'string' ),
				'verified' => array( 'type' => 'boolean' ),
			),
		),
		'execute_callback'    => 'wpagent_exec_trash_post',
		'permission_callback' => 'wpagent_perm_edit_posts',
		'meta'                => array(
			'show_in_rest' => true,
			'annotations'  => array(
				'readonly'    => false,
				'destructive' => false,
				'idempotent'  => true,
			),
		),
	);
}

/**
 * @param mixed $input
 * @return array|WP_Error
 */
function wpagent_exec_trash_post( $input ) {
	$input   = is_array( $input ) ? $input : array();
	$post_id = (int) ( $input['post_id'] ?? 0 );
	$post    = get_post( $post_id );

	if ( ! $post ) {
		return new WP_Error( 'wpagent_no_post', __( 'Beitrag nicht gefunden.', 'wp-agent-companion' ), array( 'status' => 404 ) );
	}
	// delete_post statt edit_post: Trashen ist eine Lösch-Aktion und über
	// WordPress' Meta-Capability-Zuordnung an delete_posts/delete_pages bzw.
	// delete_others_posts geknüpft, nicht an edit_posts.
	if ( ! current_user_can( 'delete_post', $post_id ) ) {
		return new WP_Error( 'wpagent_forbidden', __( 'Keine Berechtigung.', 'wp-agent-companion' ), array( 'status' => 403 ) );
	}

	if ( 'trash' !== $post->post_status ) {
		if ( ! wpagent_trash_is_available() ) {
			return wpagent_trash_disabled_error();
		}

		$res = wp_trash_post( $post_id );
		if ( ! $res || is_wp_error( $res ) ) {
			return new WP_Error( 'wpagent_trash_failed', __( 'In den Papierkorb verschieben fehlgeschlagen.', 'wp-agent-companion' ), array( 'status' => 500 ) );
		}
	}

	$fresh    = get_post( $post_id );
	$verified = ( $fresh instanceof WP_Post && 'trash' === $fresh->post_status );

	return array(
		'post_id'  => $post_id,
		'status'   => $fresh ? $fresh->post_status : '',
		'verified' => $verified,
	);
}
