<?php
/**
 * includes/cancel-notice-popup.php
 *
 * [1.6.118.116] Pop-up no site a avisar que um projecto foi cancelado/apagado.
 * Lê os avisos pendentes da user_meta 'rmbz_cancel_notices' (gravados pelo
 * cron ao apagar) e mostra um pop-up ao utilizador logado. Ao fechar, dispensa
 * via AJAX (admin-ajax) para não voltar a aparecer.
 */

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

/**
 * Mensagem legível (mesma lógica do controller REST).
 */
function rmbz_popup_cancel_message( $n ) {
    $title  = isset( $n['title'] ) ? $n['title'] : 'o teu projecto';
    $motivo = isset( $n['motivo'] ) ? $n['motivo'] : '';
    $base = sprintf( 'O teu projecto "%s" foi cancelado e removido', esc_html( $title ) );
    if ( $motivo ) $base .= ' porque ' . esc_html( $motivo );
    $base .= '.';
    if ( ! empty( $n['refunded'] ) && ! empty( $n['paid'] ) && (float) $n['paid'] > 0 ) {
        $base .= sprintf( ' O valor que pagaste (%s MT) foi devolvido à tua carteira.', number_format_i18n( (float) $n['paid'], 0 ) );
    }
    return $base;
}

/**
 * Injeta o pop-up no rodapé do site (só front-end, utilizador logado).
 */
function rmbz_render_cancel_notice_popup() {
    if ( is_admin() || ! is_user_logged_in() ) return;

    $uid = get_current_user_id();
    $notices = get_user_meta( $uid, 'rmbz_cancel_notices', true );
    if ( ! is_array( $notices ) || empty( $notices ) ) return;

    // Mostrar o mais recente
    $notice = end( $notices );
    $id     = isset( $notice['id'] ) ? $notice['id'] : '';
    $msg    = rmbz_popup_cancel_message( $notice );
    $nonce  = wp_create_nonce( 'rmbz_cancel_notice_dismiss' );
    $ajax   = admin_url( 'admin-ajax.php' );
    ?>
    <div id="rmbz-cancel-popup" style="position:fixed; inset:0; z-index:99999; display:flex; align-items:center; justify-content:center; background:rgba(0,0,0,0.6); padding:20px;">
        <div style="background:#fff; max-width:440px; width:100%; border-radius:16px; overflow:hidden; box-shadow:0 20px 60px rgba(0,0,0,0.3); font-family:inherit;">
            <div style="background:linear-gradient(135deg,#d93025,#b3261e); padding:22px 24px; text-align:center;">
                <div style="font-size:40px; line-height:1;">❌</div>
                <div style="color:#fff; font-size:18px; font-weight:800; margin-top:8px;">Projecto cancelado</div>
            </div>
            <div style="padding:22px 24px;">
                <p style="margin:0 0 18px; font-size:14px; line-height:1.6; color:#3c4043;"><?php echo $msg; // já escapado ?></p>
                <button id="rmbz-cancel-popup-ok" style="width:100%; background:#1d2327; color:#fff; border:0; border-radius:10px; padding:13px; font-size:14px; font-weight:700; cursor:pointer;">Compreendi</button>
            </div>
        </div>
    </div>
    <script>
    (function(){
        var pop = document.getElementById('rmbz-cancel-popup');
        var btn = document.getElementById('rmbz-cancel-popup-ok');
        if(!pop||!btn) return;
        btn.addEventListener('click', function(){
            pop.style.display = 'none';
            // dispensar no servidor
            var fd = new FormData();
            fd.append('action','rmbz_dismiss_cancel_notice');
            fd.append('notice_id', <?php echo wp_json_encode( (string) $id ); ?>);
            fd.append('_nonce', <?php echo wp_json_encode( $nonce ); ?>);
            fetch(<?php echo wp_json_encode( $ajax ); ?>, { method:'POST', body:fd, credentials:'same-origin' })
                .catch(function(){});
        });
    })();
    </script>
    <?php
}
add_action( 'wp_footer', 'rmbz_render_cancel_notice_popup' );

/**
 * AJAX para dispensar o aviso.
 */
function rmbz_ajax_dismiss_cancel_notice() {
    if ( ! is_user_logged_in() ) wp_send_json_error();
    check_ajax_referer( 'rmbz_cancel_notice_dismiss', '_nonce' );

    $uid = get_current_user_id();
    $id  = isset( $_POST['notice_id'] ) ? sanitize_text_field( wp_unslash( $_POST['notice_id'] ) ) : '';

    $notices = get_user_meta( $uid, 'rmbz_cancel_notices', true );
    if ( ! is_array( $notices ) ) $notices = [];

    $notices = array_values( array_filter( $notices, function ( $n ) use ( $id ) {
        return ( isset( $n['id'] ) ? (string) $n['id'] : '' ) !== $id;
    } ) );

    update_user_meta( $uid, 'rmbz_cancel_notices', $notices );
    wp_send_json_success( [ 'remaining' => count( $notices ) ] );
}
add_action( 'wp_ajax_rmbz_dismiss_cancel_notice', 'rmbz_ajax_dismiss_cancel_notice' );
