<?php
/**
 * Kích hoạt plugin — chỉ load tối thiểu (DB, cài đặt, seed tuyến).
 *
 * @package DatvetaucaotocBooking
 */

declare(strict_types=1);

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

final class Datvetau_Booking_Activator {

	public static function is_activation_request(): bool {
		if ( ! is_admin() || ! isset( $_REQUEST['action'] ) ) {
			return false;
		}
		$action = (string) wp_unslash( $_REQUEST['action'] );
		if ( ! in_array( $action, array( 'activate', 'activate-selected' ), true ) ) {
			return false;
		}
		$basename = plugin_basename( DATVETAU_BOOKING_FILE );
		if ( 'activate' === $action ) {
			$plugin = isset( $_REQUEST['plugin'] ) ? (string) wp_unslash( $_REQUEST['plugin'] ) : '';
			return $basename === $plugin;
		}
		$checked = isset( $_REQUEST['checked'] ) ? (array) wp_unslash( $_REQUEST['checked'] ) : array();
		return in_array( $basename, $checked, true );
	}

	public static function activate(): void {
		if ( version_compare( PHP_VERSION, '8.1.0', '<' ) ) {
			self::abort_activate(
				sprintf(
					/* translators: %s: PHP version */
					__( 'Plugin Đặt vé tàu cần PHP 8.1+. Máy chủ đang dùng PHP %s.', 'datvetaucaotoc-booking' ),
					PHP_VERSION
				)
			);
		}

		$wizard = DATVETAU_BOOKING_DIR . 'assets/build/wizard.js';
		if ( ! is_readable( $wizard ) || filesize( $wizard ) < 1024 ) {
			self::abort_activate(
				__( 'Thiếu hoặc hỏng file assets/build/wizard.js — upload/giải nén plugin chưa đủ.', 'datvetaucaotoc-booking' )
			);
		}

		require_once DATVETAU_BOOKING_DIR . 'includes/class-database.php';
		require_once DATVETAU_BOOKING_DIR . 'includes/class-settings.php';
		require_once DATVETAU_BOOKING_DIR . 'includes/class-route-repository.php';
		require_once DATVETAU_BOOKING_DIR . 'includes/class-route-seeder.php';

		try {
			Datvetau_Booking_Database::install();
			Datvetau_Booking_Settings::ensure_defaults();
			Datvetau_Booking_Route_Seeder::maybe_seed();
		} catch ( Throwable $e ) {
			self::abort_activate(
				$e->getMessage() . ' (' . $e->getFile() . ':' . $e->getLine() . ')'
			);
		}
	}

	private static function abort_activate( string $message ): void {
		if ( ! function_exists( 'deactivate_plugins' ) ) {
			require_once ABSPATH . 'wp-admin/includes/plugin.php';
		}
		deactivate_plugins( plugin_basename( DATVETAU_BOOKING_FILE ) );
		wp_die(
			'<p>' . esc_html( $message ) . '</p>',
			esc_html__( 'Không thể kích hoạt plugin Đặt vé tàu', 'datvetaucaotoc-booking' ),
			array( 'response' => 500, 'back_link' => true )
		);
	}
}
