<?php
/**
 * Callback function for the "Product Labels" metabox.
 *
 * Displays checkboxes for predefined labels and an input field for a custom label.
 * Users can select up to two labels in total.
 *
 * @param WP_Post $post The current post.
 * @package Boxyfy
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}

function boxyfy_produktlabels_callback( $post ) {

    // Sicherheits-Nonce
    wp_nonce_field( 'boxyfy_save_produktlabels', '_boxyfy_produktlabels_nonce' );

    // Vorhandene Werte abrufen
    $boxyfy_product_labels = get_post_meta( $post->ID, '_boxyfy_produktlabels', true );
    if ( ! is_array( $boxyfy_product_labels ) ) {
        $boxyfy_product_labels = array();
    }

    // Benutzerdefiniertes Label abrufen
    $custom_label = get_post_meta( $post->ID, '_boxyfy_custom_label', true );

    // Definiere die verfügbaren Labels
    $available_labels = array(
        'preissieger'      => __( 'Preissieger', 'boxyfy' ),
        'vergleichssieger' => __( 'Vergleichssieger', 'boxyfy' ),
        'highlight'        => __( 'Highlight', 'boxyfy' ),
        'testsieger'       => __( 'Testsieger', 'boxyfy' ),
    );
    ?>
    <div id="boxyfy_produktlabels_metabox" class="boxyfy-produklabels-wrapper">

        <!-- Ausgabe der Checkboxen -->
        <?php foreach ( $available_labels as $key => $label ) : ?>
            <?php $checked = in_array( $key, $boxyfy_product_labels, true ) ? 'checked' : ''; ?>
            <label class="boxyfy-product-label-checkbox">
                <input
                    type="checkbox"
                    name="boxyfy_produktlabels[]"
                    value="<?php echo esc_attr( $key ); ?>"
                    <?php echo esc_attr( $checked ); ?>
                />
                <?php echo esc_html( $label ); ?>
            </label>
        <?php endforeach; ?>

        <!-- Textfeld für das benutzerdefinierte Label -->
        <label class="boxyfy-custom-label-field">
            <?php esc_html_e( 'Eigenes Label:', 'boxyfy' ); ?><br>
            <input
                type="text"
                name="boxyfy_custom_label"
                value="<?php echo esc_attr( $custom_label ); ?>"
                class="boxyfy-custom-label-input"
                placeholder="<?php esc_attr_e( 'Eigenes Label eingeben', 'boxyfy' ); ?>"
            />
        </label>
        <p class="boxyfy-product-label-hint">
            <?php esc_html_e( '(max. 2 Labels wählen, inkl. eigenes Label)', 'boxyfy' ); ?>
        </p>
    </div>
    <?php
}

/**
 * Speichert die in der Metabox eingegebenen Produktlabels und das benutzerdefinierte Label.
 *
 * @param int $post_id Die ID des Beitrags.
 * @return int
 */
function boxyfy_save_produktlabels_meta( $post_id ) {
    // Überspringe Autosaves
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return $post_id;
    }

    // Nonce-Überprüfung
    if (
        ! isset( $_POST['_boxyfy_produktlabels_nonce'] )
        || ! wp_verify_nonce(
            sanitize_text_field( wp_unslash( $_POST['_boxyfy_produktlabels_nonce'] ) ),
            'boxyfy_save_produktlabels'
        )
    ) {
        return $post_id;
    }

    // Prüfe die Benutzerberechtigungen
    if ( ! current_user_can( 'edit_post', $post_id ) ) {
        return $post_id;
    }

    // Verarbeite die Checkbox-Werte für die vordefinierten Labels
    if ( isset( $_POST['boxyfy_produktlabels'] ) && is_array( $_POST['boxyfy_produktlabels'] ) ) {
        $boxyfy_product_labels = array_map( 'sanitize_text_field', wp_unslash( $_POST['boxyfy_produktlabels'] ) );
        update_post_meta( $post_id, '_boxyfy_produktlabels', $boxyfy_product_labels );
    } else {
        delete_post_meta( $post_id, '_boxyfy_produktlabels' );
    }

    // Verarbeite das benutzerdefinierte Label
    if ( isset( $_POST['boxyfy_custom_label'] ) ) {
        $custom_label = sanitize_text_field( wp_unslash( $_POST['boxyfy_custom_label'] ) );
        update_post_meta( $post_id, '_boxyfy_custom_label', $custom_label );
    } else {
        delete_post_meta( $post_id, '_boxyfy_custom_label' );
    }

    return $post_id;
}
add_action( 'save_post', 'boxyfy_save_produktlabels_meta' );