<?php
/**
 * Plugin Name:       BW Dev
 * Plugin URI:        https://plugins.bowden.works/bw-dev/
 * Description:       Bowden Works dev toolkit — admin columns, favicon, sticky elements, post-link blocks, YouTube embed, menu visibility, SVG uploads, admin notes, and Flywheel auto-update support in one actively-maintained plugin. Required for several site features. See Settings → BW Dev → About.
 * Version:           1.20.0
 * Requires at least: 6.0
 * Requires PHP:      7.4
 * Author:            Bowden Works
 * Author URI:        https://bowdenworks.com
 * License:           GPL-2.0-or-later
 * License URI:       https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain:       bw-dev
 * Domain Path:       /languages
 * Update URI:        https://plugins.bowden.works/bw-dev/
 */

defined( 'ABSPATH' ) || exit;

define( 'BW_DEV_VERSION', '1.20.0' );
define( 'BW_DEV_FILE', __FILE__ );
define( 'BW_DEV_DIR', plugin_dir_path( __FILE__ ) );
define( 'BW_DEV_URL', plugin_dir_url( __FILE__ ) );

require_once BW_DEV_DIR . 'vendor/plugin-update-checker/plugin-update-checker.php';

use YahnisElsts\PluginUpdateChecker\v5\PucFactory;

$updateChecker = PucFactory::buildUpdateChecker(
	'https://plugins.bowden.works/wp-json/bw/v1/update-check?slug=bw-dev',
	__FILE__,
	'bw-dev'
);

require_once BW_DEV_DIR . 'includes/interface-bw-dev-module.php';
require_once BW_DEV_DIR . 'includes/class-bw-dev-settings.php';
require_once BW_DEV_DIR . 'includes/class-bw-dev-brand.php';
require_once BW_DEV_DIR . 'includes/class-bw-dev-admin-page.php';
require_once BW_DEV_DIR . 'includes/class-bw-dev-migration.php';

register_activation_hook( __FILE__, array( 'BW_Dev_Migration', 'on_activation' ) );
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-analytics.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-favicon.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-sticky.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-youtube.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-post-link.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-admin-columns.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-admin-menu-role.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-dashboard.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-scheduled-actions.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-svg-upload.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-image-optimizer.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-admin-note.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-disable-comments.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-flywheel-auto-updates.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-flywheel-app-passwords.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-bw-cron.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-request-firewall.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-launch-checklist.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-external-links.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-login-branding.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-server-info.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-import-export.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-maintenance-mode.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-menu-visibility.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-sidebars.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-hide-login.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-login-redirect.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-security-hardening.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-login-log.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-subtitle.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-separator.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-robots-txt.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-llms-txt.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-site-knowledge.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-title-override.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-established-year.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-vendors.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-theme.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-inline-search.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-animate-row.php';
require_once BW_DEV_DIR . 'includes/modules/class-bw-dev-module-scroll-down.php';
require_once BW_DEV_DIR . 'includes/class-bw-dev-plugin.php';

add_action(
	'plugins_loaded',
	static function () {
		BW_Dev_Plugin::instance()->boot();
	}
);

// Request Firewall — REMOVED in 1.18.0. The feature generated an mu-plugin that
// did a blocking flock() on every request and wedged a production site on a
// networked filesystem. The module is now inert (registers no hooks); the only
// live behavior is a one-time, idempotent, fail-safe DECOMMISSION that deletes
// the stub mu-plugin + its data dir and disables the module. It runs early on
// `plugins_loaded` (before the module registry is built and regardless of the
// module-enabled setting) so it self-heals on every site — including SFTP/rsync
// updates that never fire the WP upgrader hook. After it succeeds once it's a
// single autoloaded-option check that no-ops.
add_action( 'plugins_loaded', array( 'BW_Dev_Module_Request_Firewall', 'maybe_decommission' ), 1 );
add_action( 'admin_notices', array( 'BW_Dev_Module_Request_Firewall', 'decommission_notice' ) );
register_activation_hook( __FILE__, array( 'BW_Dev_Module_Request_Firewall', 'on_plugin_activate' ) );
register_deactivation_hook( __FILE__, array( 'BW_Dev_Module_Request_Firewall', 'on_plugin_deactivate' ) );
