<?php
/**
 * Plugin Name: Web Resurrect Connector
 * Plugin URI: https://web-resurrect.com
 * Description: Connecte votre site WordPress a Web Resurrect pour publier du contenu automatiquement, gerer les redirections et servir les pages aux URLs originales. Les routes API expirent apres 7 jours, le plugin reste actif.
 * Version: 1.3.1
 * Author: Web Resurrect
 * Author URI: https://web-resurrect.com
 * License: GPL v2 or later
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: resurect-connector
 * Requires at least: 5.6
 * Requires PHP: 7.4
 */

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

define( 'RESURECT_CONNECTOR_VERSION', '1.3.1' );
define( 'RESURECT_CONNECTOR_PATH', plugin_dir_path( __FILE__ ) );
define( 'RESURECT_CONNECTOR_URL', plugin_dir_url( __FILE__ ) );
define( 'RESURECT_CONNECTOR_EXPIRY_DAYS', 7 );

require_once RESURECT_CONNECTOR_PATH . 'includes/class-api-key.php';
require_once RESURECT_CONNECTOR_PATH . 'includes/class-rest-api.php';
require_once RESURECT_CONNECTOR_PATH . 'includes/class-health-check.php';
require_once RESURECT_CONNECTOR_PATH . 'includes/class-seo-handler.php';
require_once RESURECT_CONNECTOR_PATH . 'includes/class-media-handler.php';
require_once RESURECT_CONNECTOR_PATH . 'includes/class-security-bypass.php';
require_once RESURECT_CONNECTOR_PATH . 'includes/class-auto-deactivate.php';
require_once RESURECT_CONNECTOR_PATH . 'includes/class-redirect-engine.php';
require_once RESURECT_CONNECTOR_PATH . 'admin/class-admin-page.php';

final class Resurect_Connector {

    private static $instance = null;

    public static function instance() {
        if ( null === self::$instance ) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    private function __construct() {
        Resurect_Security_Bypass::init();
        Resurect_Auto_Deactivate::init();
        Resurect_Redirect_Engine::init();

        add_action( 'rest_api_init', array( $this, 'register_rest_routes' ) );
        add_action( 'admin_init', array( $this, 'activation_redirect' ) );

        if ( is_admin() ) {
            new Resurect_Admin_Page();
        }
    }

    public function activation_redirect() {
        if ( ! get_transient( 'resurect_activation_redirect' ) ) {
            return;
        }

        delete_transient( 'resurect_activation_redirect' );

        // Don't redirect on bulk activate, network admin, or AJAX
        if ( isset( $_GET['activate-multi'] ) || is_network_admin() || wp_doing_ajax() ) {
            return;
        }

        // Don't redirect if already on the settings page
        if ( isset( $_GET['page'] ) && 'resurect-connector' === $_GET['page'] ) {
            return;
        }

        wp_safe_redirect( admin_url( 'options-general.php?page=resurect-connector' ) );
        exit;
    }

    public function register_rest_routes() {
        $rest_api = new Resurect_Rest_API();

        if ( Resurect_Auto_Deactivate::is_expired() ) {
            // After expiry: only register read-only routes (categories, authors, health, redirects)
            $rest_api->register_readonly_routes();
        } else {
            // Active: register all routes
            $rest_api->register_routes();
        }
    }

    public static function activate() {
        // Reset activation timestamp on every activation (new 7-day cycle)
        update_option( 'resurect_activated_at', time() );
        delete_option( 'resurect_api_expired_notice_shown' );

        // Flag to redirect to settings page after activation
        set_transient( 'resurect_activation_redirect', true, 60 );

        // Schedule daily expiry check
        if ( ! wp_next_scheduled( 'resurect_check_expiry' ) ) {
            wp_schedule_event( time(), 'daily', 'resurect_check_expiry' );
        }

        // Create redirects table
        Resurect_Redirect_Engine::create_table();

        flush_rewrite_rules();
    }

    public static function deactivate() {
        wp_clear_scheduled_hook( 'resurect_check_expiry' );
        flush_rewrite_rules();
    }

    public static function uninstall() {
        delete_option( 'resurect_api_key' );
        delete_option( 'resurect_activated_at' );
        delete_option( 'resurect_api_expired_notice_shown' );
        delete_option( 'resurect_catchall_404' );
        Resurect_Redirect_Engine::drop_table();
    }
}

register_activation_hook( __FILE__, array( 'Resurect_Connector', 'activate' ) );
register_deactivation_hook( __FILE__, array( 'Resurect_Connector', 'deactivate' ) );

// Settings link on plugins page
add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), function ( $links ) {
    $url = admin_url( 'options-general.php?page=resurect-connector' );
    array_unshift( $links, '<a href="' . esc_url( $url ) . '">Settings</a>' );
    return $links;
} );

add_action( 'plugins_loaded', array( 'Resurect_Connector', 'instance' ) );
