<?php
/**
 * Fast endpoint for SQM Views page tracking.
 *
 * This file serves as a PHP drop-in for direct request handling without
 * loading the full WordPress stack.
 *
 * Version: 1.2.4
 *
 * @package SQMViews
 */

// Define drop-in mode constant.
define( 'SQMVIEWS_FAST_ENDPOINT', true );

// Find WordPress root and define ABSPATH + SQMVIEWS_WP_UPLOADS before autoloader.
// utils.php requires ABSPATH (security check) and SQMVIEWS_WP_UPLOADS (directory paths).
if ( ! defined( 'ABSPATH' ) || ! defined( 'SQMVIEWS_WP_UPLOADS' ) ) {
	$sqm_views_wp_root = __DIR__;
	while ( ! file_exists( $sqm_views_wp_root . '/wp-load.php' ) ) {
		if ( '/' === $sqm_views_wp_root || dirname( $sqm_views_wp_root ) === $sqm_views_wp_root ) {
			http_response_code( 500 );
			die( 'WordPress installation not found.' );
		}
		$sqm_views_wp_root = dirname( $sqm_views_wp_root );
	}
	if ( ! defined( 'ABSPATH' ) ) {
		// phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound -- ABSPATH is a WordPress core constant, required for utils.php security check.
		define( 'ABSPATH', $sqm_views_wp_root . '/' );
	}
	if ( ! defined( 'SQMVIEWS_WP_UPLOADS' ) ) {
		define( 'SQMVIEWS_WP_UPLOADS', $sqm_views_wp_root . '/wp-content/uploads' );
	}
}

$sqm_views_autoloader_locations = array(
	__DIR__ . '/wp-content/plugins/sqm-views/vendor/autoload.php',
	__DIR__ . '/vendor/autoload.php',
	__DIR__ . '/plugins/sqm-views/vendor/autoload.php',
);

foreach ( $sqm_views_autoloader_locations as $sqm_views_autoloader ) {
	if ( is_file( $sqm_views_autoloader ) ) {
		require_once $sqm_views_autoloader;
		break;
	}
}

if ( ! defined( 'SQMVIEWS' ) ) {
	throw new Exception( 'SQMViews autoloader not found.' );
}

use SQMViews\SQMViewsRapidProcessor;

$sqm_views_processor = new SQMViewsRapidProcessor();
$sqm_views_processor->send_headers();
$sqm_views_request_body = file_get_contents( 'php://input', false, null, 0, SQMVIEWS_REQUEST_LENGTH_HARD_LIMIT );
$sqm_views_response     = $sqm_views_processor->process( $sqm_views_request_body );

// Set HTTP status code.
http_response_code( $sqm_views_response->get_status_code() );

// Send JSON response.
if ( $sqm_views_response->is_error() ) {
	// phpcs:ignore WordPress.WP.AlternativeFunctions.json_encode_json_encode -- WordPress not loaded.
	echo json_encode(
		array(
			'error' => $sqm_views_response->get_error_message(),
			'code'  => $sqm_views_response->get_error_code(),
		)
	) . "\n";
} else {
	// phpcs:ignore WordPress.WP.AlternativeFunctions.json_encode_json_encode -- WordPress not loaded.
	echo json_encode( $sqm_views_response->get_data() ) . "\n";
}
