<?php
/**
 * Plugin Name: BW Onboarding Guide
 * Plugin URI: https://bowdenworks.com
 * Description: Create interactive, step-by-step onboarding tours for your WordPress site. Guide new users through your site with highlighted hotspots, tooltips, and multi-page support.
 * Version: 1.0.0
 * Author: Bowden Works
 * Author URI: https://bowdenworks.com
 * License: GPL v2 or later
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: bw-onboarding-guide
 */

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

define( 'BW_ONBOARDING_VERSION', '1.0.0' );
define( 'BW_ONBOARDING_PATH', plugin_dir_path( __FILE__ ) );
define( 'BW_ONBOARDING_URL', plugin_dir_url( __FILE__ ) );

// Include files
require_once BW_ONBOARDING_PATH . 'includes/class-bw-post-type.php';
require_once BW_ONBOARDING_PATH . 'includes/class-bw-admin.php';
require_once BW_ONBOARDING_PATH . 'includes/class-bw-settings.php';
require_once BW_ONBOARDING_PATH . 'includes/class-bw-frontend.php';

/**
 * Initialize the plugin.
 */
function bw_onboarding_init() {
    BW_Post_Type::get_instance();
    BW_Admin::get_instance();
    BW_Settings::get_instance();
    BW_Frontend::get_instance();
}
add_action( 'plugins_loaded', 'bw_onboarding_init' );

/**
 * Activation hook — set default options.
 */
function bw_onboarding_activate() {
    $defaults = array(
        'bw_onboarding_trigger'       => 'first_visit',
        'bw_onboarding_show_to'       => 'logged_in',
        'bw_onboarding_primary_color' => '#2B2663',
        'bw_onboarding_accent_color'  => '#1fa88e',
        'bw_onboarding_allow_restart' => '1',
    );
    foreach ( $defaults as $key => $value ) {
        if ( get_option( $key ) === false ) {
            add_option( $key, $value );
        }
    }
    // Flush rewrite rules for custom post type
    BW_Post_Type::get_instance()->register_post_type();
    flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'bw_onboarding_activate' );

/**
 * Deactivation hook.
 */
function bw_onboarding_deactivate() {
    flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'bw_onboarding_deactivate' );

/**
 * AJAX: Mark guide as completed for the current user.
 */
function bw_onboarding_complete_guide() {
    check_ajax_referer( 'bw_onboarding_nonce', 'nonce' );

    $guide_id = isset( $_POST['guide_id'] ) ? intval( $_POST['guide_id'] ) : 0;
    if ( ! $guide_id ) {
        wp_send_json_error( 'Invalid guide ID' );
    }

    if ( is_user_logged_in() ) {
        $user_id   = get_current_user_id();
        $completed = get_user_meta( $user_id, 'bw_onboarding_completed', true );
        if ( ! is_array( $completed ) ) {
            $completed = array();
        }
        $completed[ $guide_id ] = current_time( 'timestamp' );
        update_user_meta( $user_id, 'bw_onboarding_completed', $completed );
    }

    wp_send_json_success();
}
add_action( 'wp_ajax_bw_onboarding_complete', 'bw_onboarding_complete_guide' );
add_action( 'wp_ajax_nopriv_bw_onboarding_complete', 'bw_onboarding_complete_guide' );

/**
 * AJAX: Reset guide completion for current user (for "retake tour").
 */
function bw_onboarding_reset_guide() {
    check_ajax_referer( 'bw_onboarding_nonce', 'nonce' );

    $guide_id = isset( $_POST['guide_id'] ) ? intval( $_POST['guide_id'] ) : 0;

    if ( is_user_logged_in() ) {
        $user_id   = get_current_user_id();
        $completed = get_user_meta( $user_id, 'bw_onboarding_completed', true );
        if ( is_array( $completed ) && isset( $completed[ $guide_id ] ) ) {
            unset( $completed[ $guide_id ] );
            update_user_meta( $user_id, 'bw_onboarding_completed', $completed );
        }
    }

    wp_send_json_success();
}
add_action( 'wp_ajax_bw_onboarding_reset', 'bw_onboarding_reset_guide' );
