<?php






//include get_template_directory(). '/includes/blocks/lcp-gallery/lcp-gallery.php';
include get_template_directory() . '/includes/classes/blocks.php';
new Lcp_Blocks();


// Include backend php
include get_template_directory() . '/includes/classes/backend.php';


function lcp_block_theme_setup() {
    add_theme_support( 'block-templates' );
}
add_action( 'after_setup_theme', 'lcp_block_theme_setup' );

function lcp_enqueue() {
    // Enqueue the theme's main stylesheet (style.css)
    wp_enqueue_style('lcp-style', get_stylesheet_uri());
    wp_enqueue_script('lcp-script', get_template_directory_uri() . '/script.js');

}

add_action('wp_enqueue_scripts', 'lcp_enqueue');



function lcp_backend_enqueue() {
    // Enqueue the theme's main stylesheet (style.css)
    wp_enqueue_style('lcp-style', get_stylesheet_uri());
    wp_enqueue_script('lcp-script', get_template_directory_uri() . '/script.js');

}

add_action('admin_enqueue_scripts', 'lcp_enqueue');

// Backend enqueue
function lcp_enqueue_svg_repeater_script($hook) {
    // Only enqueue on the theme settings page
   // if ($hook !== 'settings_page_lcp-theme-settings') {
     //   return;
   // }

    // Enqueue the script with a dependency on jQuery
    wp_enqueue_script(
        'lcp-svg-repeater', // Handle for the script
        get_template_directory_uri() . '/assets/js/backend-script.js', // Path to your JS file
        array(), // Dependency on jQuery
        null, // No specific version
        true  // Load in footer (true)
    );
}
add_action('admin_enqueue_scripts', 'lcp_enqueue_svg_repeater_script');



/* KEY POINTS */
function add_key_points_meta_box() {
    add_meta_box(
        'key_points_meta_box',         // ID of the meta box
        'Key Points',                  // Title of the meta box
        'render_key_points_meta_box',  // Callback function to display the meta box
        'post',                        // Post type (you can change it to other post types)
        'normal',                      // Context (normal, side, advanced)
        'default'                      // Priority
    );
}
// Add meta box if setting is turned on
$options = get_option('lcp_theme_settings', array());
$enable_key_points_meta = isset($options['enable_key_points_meta']) ? $options['enable_key_points_meta'] : 0;

// Check if 'enable_key_points_meta' is enabled (1), then add the meta box
if ($enable_key_points_meta) {
    // Hook into add_meta_boxes to register the custom meta box
    add_action('add_meta_boxes', 'add_key_points_meta_box');
}

// Sanitize the SVGs data
function lcp_custom_svgs_sanitize($input) {
    // Ensure the input is an array
    if (is_array($input)) {
        foreach ($input as $key => $svg) {
            // Sanitize the name and path for each SVG
            if (isset($svg['name'])) {
                $input[$key]['name'] = sanitize_text_field($svg['name']);
            }
            if (isset($svg['path'])) {
                $input[$key]['path'] = sanitize_textarea_field($svg['path']);
            }
        }
    }

    return $input;
}

// Existing function to render the theme settings page

// Callback function to render the meta box
function render_key_points_meta_box($post) {
    // Retrieve the stored key points (serialized data)
    $key_points_serialized = get_post_meta($post->ID, '_key_points', true);
    $key_points = !empty($key_points_serialized) ? unserialize($key_points_serialized) : [];
    ?>
    <div id="key-points-repeater">
        <ul id="key-points-list">
            <?php foreach ($key_points as $index => $point) : ?>
                <li class="key-point">
                    <input type="text" name="key_points[<?php echo $index; ?>]" value="<?php echo esc_attr($point); ?>" class="key-point-input" />
                    <button type="button" class="remove-key-point">Remove</button>
                </li>
            <?php endforeach; ?>
        </ul>
        <button type="button" id="add-key-point">Add Key Point</button>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function () {
            const addButton = document.getElementById('add-key-point');
            const keyPointsList = document.getElementById('key-points-list');

            // Function to add a new key point input field
            addButton.addEventListener('click', function () {
                const index = keyPointsList.children.length;
                const newItem = document.createElement('li');
                newItem.classList.add('key-point');
                
                newItem.innerHTML = `
                    <input type="text" name="key_points[${index}]" value="" class="key-point-input" />
                    <button type="button" class="remove-key-point">Remove</button>
                `;
                keyPointsList.appendChild(newItem);
            });

            // Function to remove a key point input field
            keyPointsList.addEventListener('click', function (e) {
                if (e.target && e.target.classList.contains('remove-key-point')) {
                    e.target.closest('.key-point').remove();
                }
            });
        });
    </script>
    <?php
}

// Save the meta box data
function save_key_points_meta_box($post_id) {
    // Check if this is an autosave or if the nonce is missing
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
    if (!isset($_POST['key_points'])) return $post_id;

    // Sanitize and store the key points as a serialized array
    $key_points = array_map('sanitize_text_field', $_POST['key_points']);
    update_post_meta($post_id, 'key_points', serialize($key_points)); // Use serialize instead of json_encode
}
add_action('save_post', 'save_key_points_meta_box');

/* INSERT ICONS TO DB */
// Function to load the JSON file and insert SVG data into the database
function load_material_icons_into_db($jsonData) {
    // Step 2: Decode the JSON data into a PHP array
    $data = json_decode($jsonData, true);

    // Check if JSON decoding was successful
    if ($data === null) {
        die("Error decoding the JSON data.");
    }

    // Step 3: Create the table if it doesn't exist
    global $wpdb;
    $table_name = $wpdb->prefix . 'lcp_icons'; // Table name with WordPress prefix

    // Create the table if it does not exist
    $sql = "
    CREATE TABLE IF NOT EXISTS $table_name (
        id VARCHAR(255) NOT NULL,  -- Use the id from the JSON file
        set_name VARCHAR(255) NOT NULL,
        set_family VARCHAR(255) NOT NULL,
        name VARCHAR(255) NOT NULL,
        paths LONGTEXT NOT NULL,
        viewbox VARCHAR(255) NOT NULL,
        PRIMARY KEY (id)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    ";

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

    // Step 4: Insert data into the database
    foreach ($data as $iconSet) {
        // Extract values for the set_name and set_family from the top-level object
        $setName = sanitize_text_field($iconSet['name']);
        $setFamily = sanitize_text_field($iconSet['family']);

        // Insert each SVG in the 'svgs' array
        if (isset($iconSet['svgs']) && is_array($iconSet['svgs'])) {
            foreach ($iconSet['svgs'] as $svg) {
                $name = sanitize_text_field($svg['name']);
                
                // Unescape the paths field (HTML entities or Unicode escapes)
                $paths = html_entity_decode($svg['paths']);  // Decode HTML entities (like &quot; or &amp;)
                $paths = stripslashes($paths);  // Remove any additional escaping, such as slashes
                
                $viewbox = sanitize_text_field($svg['viewBox']);
                $id = sanitize_text_field($svg['id']);  // Use the id from the JSON object

                // Prepare the data for insertion
                $data = array(
                    'id' => $id,  // Use the id from the JSON object
                    'set_name' => $setName,
                    'set_family' => $setFamily,
                    'name' => $name,
                    'paths' => $paths,
                    'viewbox' => $viewbox,
                );
                
                // Insert into the database
                $wpdb->insert($table_name, $data);
            }
        }
    }

    echo '<p>Icons have been imported into the database.</p>';
}


// Hook the function to the theme activation process


// Function to drop the lcp_icons table when the theme is deactivated
function drop_lcp_icons_table() {
    global $wpdb;

    // Table name with WordPress prefix
    $table_name = $wpdb->prefix . 'lcp_icons';

    // SQL query to drop the table
    $sql = "DROP TABLE IF EXISTS $table_name;";

    // Execute the query
    $wpdb->query($sql);


}

// Hook the function to the theme deactivation process

// Register the function to run when the theme is switched (deactivated)
add_action('switch_theme', 'drop_lcp_icons_table');



/* BACKEND ICON ADDER */
function icon_sets_dashboard_callback() {
    // Get the file path to the JSON file
    $json_file_path = get_template_directory() . '/assets/json/icons/icon-definitions.json';
    
    // Check if the file exists
    if (file_exists($json_file_path)) {
        // Read the file contents and decode the JSON
        $json_data = file_get_contents($json_file_path);
        $icon_sets = json_decode($json_data, true);

        if ($icon_sets) {
            // Group icon sets by setFamily
            $grouped_sets = [];
            foreach ($icon_sets as $set) {
                // Check if the set has the setFamily key
                $setFamily = isset($set['setFamily']) ? $set['setFamily'] : 'Unknown';

                // Initialize the family group if not already initialized
                if (!isset($grouped_sets[$setFamily])) {
                    $grouped_sets[$setFamily] = [];
                }

                // Handle both 'file' and 'fileName'
                // Check if 'file' is set or fallback to 'fileName'
                $setFile = isset($set['file']) ? $set['file'] : (isset($set['fileName']) ? $set['fileName'] : '');

                // Ensure we are correctly adding the set data
                $grouped_sets[$setFamily][] = [
                    'id' => $set['id'],
                    'setName' => $set['setName'],
                    'file' => $setFile
                ];
            }

            // Output the HTML for the dashboard
            echo '<div class="wrap">';
            echo '<h1>' . esc_html('Icon Sets Dashboard') . '</h1>';
            
            // Loop through each setFamily and create a section with checkboxes
            foreach ($grouped_sets as $setFamily => $sets) {
                echo '<div class="lcp-icon-set">';
                echo '<h2>' . esc_html($setFamily) . '</h2>';
                echo '<ul>';

                // Loop through each setName and create a checkbox
                foreach ($sets as $set) {
                    $checkbox_id = 'icon_set_' . $set['id'];
                    echo '<li><input type="checkbox" id="' . esc_attr($checkbox_id) . '" name="icon_sets[]" value="' . esc_attr($set['file']) . '" data-icon-set-id="' . esc_attr($set['id']) . '">';
                    echo '<label for="' . esc_attr($checkbox_id) . '">' . esc_html($set['setName']) . '</label></li>';
                }

                echo '</ul>';
                echo '</div>';
            }

            // Add submit button
            echo '<form method="POST" action="">'; // Ensure the form method is POST
            echo '<input type="submit" name="submit_icon_sets" value="Import Selected Icons" class="button-primary">';
            echo '</form>';

            echo '</div>';

            // Handle form submission
            if (isset($_POST['submit_icon_sets'])) {
                // Debugging: Check if form is actually submitting data
                echo '<pre>';
                var_dump($_POST['icon_sets']);  // Check if checkboxes are selected
                echo '</pre>';

                // Debugging: Display selected icon sets
                if (isset($_POST['icon_sets']) && !empty($_POST['icon_sets'])) {
                    echo '<p>Selected icon sets:</p>';
                    echo '<pre>';
                    var_dump($_POST['icon_sets']);  // Output the selected icon set values
                    echo '</pre>';

                    // Loop through selected icon sets and process the corresponding JSON files
                    foreach ($_POST['icon_sets'] as $file) {
                        // Look for the icon set that matches the selected file path
                        foreach ($icon_sets as $set) {
                            // Check if the 'file' or 'fileName' matches the selected file
                            if ($set['file'] == $file || (isset($set['fileName']) && $set['fileName'] == $file)) {
                                // Get the JSON file for the selected set
                                $jsonFilePath = get_template_directory() . '/assets/json/icons' . (isset($set['file']) ? $set['file'] : $set['fileName']);
                                
                                // Debugging: Print the json file path being used
                                echo '<p>Loading file: ' . esc_html($jsonFilePath) . '</p>';

                                if (file_exists($jsonFilePath)) {
                                    $jsonData = file_get_contents($jsonFilePath);
                                    load_material_icons_into_db($jsonData); // Pass the JSON data to the function
                                } else {
                                    echo '<p>Error: File ' . esc_html($jsonFilePath) . ' not found.</p>';
                                }
                                break;
                            }
                        }
                    }
                } else {
                    echo '<p>No icon sets selected.</p>';
                }
            }

        } else {
            echo '<p>No icon sets found in the JSON file.</p>';
        }
    } else {
        echo '<p>Icon definitions JSON file not found.</p>';
    }
}


function register_icon_dashboard_page() {
    add_menu_page(
        'Icon Sets',          // Page Title
        'Icon Sets',          // Menu Title
        'manage_options',     // Capability required
        'icon-sets-dashboard', // Menu slug
        'icon_sets_dashboard_callback', // Callback function
        'dashicons-admin-generic', // Icon
        60                    // Position in the menu
    );
}

add_action('admin_menu', 'register_icon_dashboard_page');
