<?php
/**
 * Installer: creates and upgrades the sites registry table.
 */

defined( 'ABSPATH' ) || exit;

class BW_Guides_Server_Installer {

	const OPTION_DB_VERSION = 'bw_guides_server_db_version';

	public static function activate() {
		self::install_table();
		update_option( self::OPTION_DB_VERSION, BW_GUIDES_SERVER_DB_VERSION );
	}

	public static function deactivate() {
		// Intentionally no-op. We keep data on deactivation.
	}

	public static function maybe_upgrade() {
		$installed = get_option( self::OPTION_DB_VERSION );
		if ( $installed !== BW_GUIDES_SERVER_DB_VERSION ) {
			self::install_table();
			update_option( self::OPTION_DB_VERSION, BW_GUIDES_SERVER_DB_VERSION );
		}
	}

	private static function install_table() {
		global $wpdb;
		$table           = BW_Guides_Server_Sites::table_name();
		$charset_collate = $wpdb->get_charset_collate();

		$sql = "CREATE TABLE {$table} (
			id BIGINT UNSIGNED AUTO_INCREMENT,
			site_name VARCHAR(190) NOT NULL,
			site_url VARCHAR(255) NOT NULL DEFAULT '',
			key_hash CHAR(64) NOT NULL DEFAULT '',
			key_hint VARCHAR(12) NOT NULL DEFAULT '',
			status VARCHAR(20) NOT NULL DEFAULT 'active',
			created_at DATETIME NOT NULL,
			last_sync_at DATETIME NULL,
			last_sync_ip VARCHAR(64) NOT NULL DEFAULT '',
			last_client_version VARCHAR(32) NOT NULL DEFAULT '',
			client_slug VARCHAR(64) NOT NULL DEFAULT '',
			PRIMARY KEY  (id),
			KEY idx_status (status),
			KEY idx_client_slug (client_slug)
		) {$charset_collate};";

		require_once ABSPATH . 'wp-admin/includes/upgrade.php';
		dbDelta( $sql );
	}
}
