<?php
/**
 * Main integration file.
 *
 * @package wp-sqlite-integration
 * @since 1.0.0
 */

/**
 * Load the "SQLITE_DRIVER_VERSION" constant.
 */
require_once __DIR__ . '/../database/version.php';

// Require the constants file.
require_once __DIR__ . '/../../constants.php';

// Bail early if DB_ENGINE is not defined as sqlite.
if ( ! defined( 'DB_ENGINE' ) || 'sqlite' !== DB_ENGINE ) {
	return;
}

if ( ! extension_loaded( 'pdo' ) ) {
	wp_die(
		new WP_Error(
			'pdo_not_loaded',
			sprintf(
				'<h1>%1$s</h1><p>%2$s</p>',
				'PHP PDO Extension is not loaded',
				'Your PHP installation appears to be missing the PDO extension which is required for this version of WordPress and the type of database you have specified.'
			)
		),
		'PHP PDO Extension is not loaded.'
	);
}

if ( ! extension_loaded( 'pdo_sqlite' ) ) {
	wp_die(
		new WP_Error(
			'pdo_driver_not_loaded',
			sprintf(
				'<h1>%1$s</h1><p>%2$s</p>',
				'PDO Driver for SQLite is missing',
				'Your PHP installation appears not to have the right PDO drivers loaded. These are required for this version of WordPress and the type of database you have specified.'
			)
		),
		'PDO Driver for SQLite is missing.'
	);
}

if ( defined( 'WP_SQLITE_AST_DRIVER' ) && WP_SQLITE_AST_DRIVER ) {
	require_once __DIR__ . '/../database/load.php';
} else {
	require_once __DIR__ . '/php-polyfills.php';
	require_once __DIR__ . '/class-wp-sqlite-lexer.php';
	require_once __DIR__ . '/class-wp-sqlite-query-rewriter.php';
	require_once __DIR__ . '/class-wp-sqlite-translator.php';
	require_once __DIR__ . '/class-wp-sqlite-token.php';
	require_once __DIR__ . '/class-wp-sqlite-pdo-user-defined-functions.php';
}
require_once __DIR__ . '/class-wp-sqlite-db.php';
require_once __DIR__ . '/install-functions.php';

/**
 * The DB_NAME constant is required by the new SQLite driver.
 *
 * There are some existing projects in which the DB_NAME constant is missing in
 * wp-config.php. To enable easier early adoption and testing of the new SQLite
 * driver, let's allow using a default database name when DB_NAME is not set.
 *
 * TODO: For version 3.0, enforce the DB_NAME constant and remove the fallback.
 */
if ( defined( 'DB_NAME' ) && '' !== DB_NAME ) {
	$db_name = DB_NAME;
} else {
	$db_name = apply_filters( 'wp_sqlite_default_db_name', 'database_name_here' );
}

/*
 * Debug: Cross-check with MySQL.
 * This is for debugging purpose only and requires files
 * that are present in the GitHub repository
 * but not the plugin published on WordPress.org.
 */
$crosscheck_tests_file_path = __DIR__ . '/class-wp-sqlite-crosscheck-db.php';
if ( defined( 'SQLITE_DEBUG_CROSSCHECK' ) && SQLITE_DEBUG_CROSSCHECK && file_exists( $crosscheck_tests_file_path ) ) {
	require_once $crosscheck_tests_file_path;
	$GLOBALS['wpdb'] = new WP_SQLite_Crosscheck_DB( $db_name );
} else {
	$GLOBALS['wpdb'] = new WP_SQLite_DB( $db_name );

	// Boot the Query Monitor plugin if it is active.
	require_once __DIR__ . '/../../integrations/query-monitor/boot.php';
}
