<?php
/**
 * Plugin Name: Falcify Connector
 * Plugin URI: https://www.falcify.fr
 * Description: Connecte WordPress à Falcify et propose un bouton "Lire en FALC" sur le site public.
 * Version: 2.7.27
 * Author: Techniweb
 * Author URI: https://www.techniweb-agence.fr/
 * License: GPL-2.0+
 * Text Domain: falcify-connector
 * Domain Path: /languages
 */

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

define( 'FALCIFY_VERSION', '2.7.27' );
define( 'FALCIFY_FILE', __FILE__ );
define( 'FALCIFY_DIR', plugin_dir_path( __FILE__ ) );
define( 'FALCIFY_URL', plugin_dir_url( __FILE__ ) );

require_once FALCIFY_DIR . 'includes/class-falcify-plugin.php';
require_once FALCIFY_DIR . 'includes/class-falcify-settings.php';
require_once FALCIFY_DIR . 'includes/class-falcify-api.php';
require_once FALCIFY_DIR . 'includes/class-falcify-post-types.php';
require_once FALCIFY_DIR . 'includes/class-falcify-metabox.php';
require_once FALCIFY_DIR . 'includes/class-falcify-renderer.php';
require_once FALCIFY_DIR . 'includes/class-falcify-updater.php';
require_once FALCIFY_DIR . 'includes/class-falcify-usage.php';
require_once FALCIFY_DIR . 'includes/class-falcify-admin.php';
require_once FALCIFY_DIR . 'includes/class-falcify-history.php';
require_once FALCIFY_DIR . 'includes/class-falcify-support.php';
require_once FALCIFY_DIR . 'includes/class-falcify-list-columns.php';

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

// Self-healing : si l'option existe mais qu'il manque les clés introduites
// après l'activation d'origine (ex. sous-toggles pictogrammes), on les
// complète avec les valeurs par défaut sans écraser les choix utilisateur.
// Migration v2.7.27 : picto_size et picto_spacing étaient en em → conversion px.
add_action( 'plugins_loaded', function() {
    $stored = get_option( Falcify_Settings::OPTION, null );
    if ( ! is_array( $stored ) ) return;
    $defaults = Falcify_Settings::defaults();
    $changed  = false;
    // Clés manquantes : on ajoute les défauts sans écraser l'existant.
    $missing = array_diff_key( $defaults, $stored );
    if ( ! empty( $missing ) ) {
        $stored  = array_merge( $defaults, $stored );
        $changed = true;
    }
    // Migration em → px : une valeur stockée ≤ 10 est une ancienne valeur en em.
    if ( isset( $stored['picto_size'] ) && is_numeric( $stored['picto_size'] ) && (float) $stored['picto_size'] <= 10 ) {
        $stored['picto_size'] = (string) (int) max( 40, min( 200, round( (float) $stored['picto_size'] * 50 ) ) );
        $changed = true;
    }
    if ( isset( $stored['picto_spacing'] ) && is_numeric( $stored['picto_spacing'] ) && (float) $stored['picto_spacing'] <= 10 ) {
        $stored['picto_spacing'] = (string) (int) max( 0, min( 60, round( (float) $stored['picto_spacing'] * 40 ) ) );
        $changed = true;
    }
    if ( $changed ) {
        update_option( Falcify_Settings::OPTION, $stored );
    }
}, 5 );

register_activation_hook( __FILE__, function() {
    Falcify_Settings::set_defaults();
});
