<?php
/**
 * Renders the rating star metabox in the edit screen.
 *
 * Displays fields for entering a star rating, star size,
 * a rating text, and a checkbox to hide the rating.
 *
 * @param WP_Post $post The current post.
 * @package Boxyfy
 */

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

function boxyfy_render_rating_metabox( $post ) {
    // Sicherheitsnonce einbinden
    wp_nonce_field( 'boxyfy_save_rating', 'boxyfy_rating_nonce' );

    // Aktuelle Werte abrufen
    $current_rating       = get_post_meta( $post->ID, 'tsprodukte_star_rating', true );
    $current_star_size    = get_post_meta( $post->ID, 'tsprodukte_star_rating_size', true ) ?: '15';
    $current_rating_label = get_post_meta( $post->ID, 'tsprodukte_rating_label', true ) ?: 'Kundenbewertung';
    $hide_rating          = get_post_meta( $post->ID, 'tsprodukte_hide_rating', true );
    $hide_rating          = ( '1' === $hide_rating ) ? '1' : '0';
    ?>
    <p>
        <label for="boxyfy_hide_rating">
            <input type="checkbox" id="boxyfy_hide_rating" name="boxyfy_hide_rating" value="1" <?php checked( $hide_rating, '1' ); ?> />
            <?php esc_html_e( 'Bewertung nicht anzeigen?', 'boxyfy' ); ?>
        </label>
    </p>

    <p>
        <label for="boxyfy_rating">
            <?php esc_html_e( 'Bewertung (1,0 - 5,0):', 'boxyfy' ); ?>
        </label><br />
        <input
            class="boxyfy-star-rating-input"
            type="number"
            id="boxyfy_rating"
            name="boxyfy_rating"
            min="1"
            max="5"
            step="0.1"
            value="<?php echo esc_attr( $current_rating ); ?>"
        />
    </p>

    <p>
        <label for="boxyfy_star_size">
            <?php esc_html_e( 'Sterne-Größe (optional):', 'boxyfy' ); ?>
        </label><br />
        <input
            class="boxyfy-star-rating-size-input"
            type="number"
            id="boxyfy_star_size"
            name="boxyfy_star_size"
            min="10"
            max="50"
            step="1"
            value="<?php echo esc_attr( $current_star_size ); ?>"
        />
    </p>

    <p>
        <label for="boxyfy_rating_label">
            <?php esc_html_e( 'Bewertungstext (optional):', 'boxyfy' ); ?>
        </label><br />
        <input
            class="boxyfy-rating-text-input"
            type="text"
            id="boxyfy_rating_label"
            name="boxyfy_rating_label"
            value="<?php echo esc_attr( $current_rating_label ); ?>"
            placeholder="<?php esc_attr_e( 'Bewertung', 'boxyfy' ); ?>"
        />
    </p>
    <?php
}

/**
 * Speichert die Rating-Metabox-Daten.
 *
 * @param int $post_id Die ID des zu speichernden Posts.
 */
function boxyfy_save_rating_metabox( $post_id ) {
    // Prüfen, ob die Nonce vorhanden und gültig ist
    if (
        ! isset( $_POST['boxyfy_rating_nonce'] )
        || ! wp_verify_nonce(
            sanitize_text_field( wp_unslash( $_POST['boxyfy_rating_nonce'] ) ),
            'boxyfy_save_rating'
        )
    ) {
        return;
    }

    // Speichern während eines Autosaves überspringen
    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    // Überprüfen, ob der Benutzer berechtigt ist, den Post zu bearbeiten
    if ( isset( $_POST['post_type'] ) && 'boxyfy_tsprodukte' === $_POST['post_type'] ) {
        if ( ! current_user_can( 'edit_post', $post_id ) ) {
            return;
        }
    }

    // Checkbox "Bewertung nicht anzeigen" speichern
    $hide_rating = isset( $_POST['boxyfy_hide_rating'] ) ? '1' : '0';
    update_post_meta( $post_id, 'tsprodukte_hide_rating', $hide_rating );

    // Bewertung speichern
    if ( isset( $_POST['boxyfy_rating'] ) ) {
        $boxyfy_star_rating = floatval( wp_unslash( $_POST['boxyfy_rating'] ) );
        if ( $boxyfy_star_rating < 1.0 ) {
            $boxyfy_star_rating = 1.0;
        } elseif ( $boxyfy_star_rating > 5.0 ) {
            $boxyfy_star_rating = 5.0;
        }
        update_post_meta( $post_id, 'tsprodukte_star_rating', $boxyfy_star_rating );
    }

    // Sterne-Größe speichern
    if ( isset( $_POST['boxyfy_star_size'] ) ) {
        $boxyfy_star_rating_size = intval( wp_unslash( $_POST['boxyfy_star_size'] ) );
        if ( $boxyfy_star_rating_size >= 10 && $boxyfy_star_rating_size <= 50 ) {
            update_post_meta( $post_id, 'tsprodukte_star_rating_size', $boxyfy_star_rating_size );
        }
    }

    // Bewertungstext speichern (ACHTUNG: Hier war vorher "$post->ID" statt "$post_id")
    if ( isset( $_POST['boxyfy_rating_label'] ) ) {
        $boxyfy_rating_label = sanitize_text_field( wp_unslash( $_POST['boxyfy_rating_label'] ) );
        update_post_meta( $post_id, 'tsprodukte_rating_label', $boxyfy_rating_label );
    }
}
add_action( 'save_post', 'boxyfy_save_rating_metabox' );