<?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');
    wp_enqueue_script('lcp-ui-script', get_template_directory_uri() . '/assets/js/lcp-ui.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');


/* 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');



// 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 */
// Register the dashboard page in the admin menu
function mytheme_register_dashboard_page() {
    add_menu_page(
        'Icon Management', // Page Title
        'Icon Management', // Menu Title
        'manage_options',  // Capability
        'icon-management', // Menu Slug
        'mytheme_dashboard_page', // Callback function
        'dashicons-images-alt2', // Icon for the menu item
        60 // Position
    );
}
add_action('admin_menu', 'mytheme_register_dashboard_page');

// Callback function to display the dashboard page content
function mytheme_dashboard_page() {
    ?>
    <div class="wrap">
        <h1><?php esc_html_e('Icon Management Dashboard', 'mytheme'); ?></h1>
        <div id="icon-dashboard-container">
            <?php mytheme_display_icon_sets(); ?>
        </div> <!-- This will be populated by PHP -->
    </div>
    <?php
}

// Function to read and display icon sets from the JSON file
// Function to read and display icon sets from the JSON file
function mytheme_display_icon_sets() {
    // Path to the JSON file
    $json_path = get_template_directory() . '/assets/json/icons/icon-definitions.json';

    // Check if the file exists
    if (file_exists($json_path)) {
        // Get the contents of the JSON file
        $json_data = file_get_contents($json_path);

        // Decode JSON data into a PHP array
        $icon_sets = json_decode($json_data, true);

        // Loop through the icon sets and output HTML
        foreach ($icon_sets as $icon_set) {
            ?>
            <div class="icon-set">
                <h3><?php echo esc_html($icon_set['setFamily'] . ' - ' . $icon_set['setName']); ?></h3>
                
                <!-- Add data-icon-set-id attribute to the Install and Uninstall buttons -->
                <button class="install-btn" data-icon-set-id="<?php echo esc_attr($icon_set['id']); ?>">Install</button>
                <button class="uninstall-btn" data-icon-set-id="<?php echo esc_attr($icon_set['id']); ?>">Uninstall</button>
            </div>
            <?php
        }
    } else {
        echo '<p>' . esc_html__('No icon definitions found.', 'lcp') . '</p>';
    }
}


// Enqueue the dashboard styles only on the icon-management page
function mytheme_enqueue_dashboard_styles($hook) {


    // Enqueue CSS for the dashboard
    wp_enqueue_style(
        'mytheme-dashboard-css',
        get_template_directory_uri() . '/assets/css/dashboard.css'
    );
}
add_action('admin_enqueue_scripts', 'mytheme_enqueue_dashboard_styles');


// Handle the AJAX request for installing icon sets
function mytheme_install_icon_set() {
    if (!isset($_POST['icon_set_id'])) {
        wp_send_json_error(array('message' => 'Invalid icon set ID.'));
    }

    $icon_set_id = intval($_POST['icon_set_id']);
    $json_path = get_template_directory() . '/assets/json/icons/icon-definitions.json';

    // Create the database table if it doesn't exist
    mytheme_create_icons_table();

    // Read the icon definitions JSON file
    if (file_exists($json_path)) {
        $json_data = file_get_contents($json_path);
        $icon_sets = json_decode($json_data, true);

        // Search for the selected icon set by ID
        $selected_icon_set = null;
        foreach ($icon_sets as $icon_set) {
            if ($icon_set['id'] === $icon_set_id) {
                $selected_icon_set = $icon_set;
                break;
            }
        }

        // If the icon set is found
        if ($selected_icon_set) {
            // Dynamically build the icon file path using the fileName from icon-definitions.json
            $file_name = $selected_icon_set['fileName'];  // Assuming the JSON structure has 'fileName' key
            $icon_file_path = get_template_directory() . '/assets/json/icons/' . $file_name;

            // Now read the corresponding SVG file for the icon set
            if (file_exists($icon_file_path)) {
                $icon_data = file_get_contents($icon_file_path);
                $icon_json = json_decode($icon_data, true);

                // Debugging: Check the structure of the decoded JSON
                if (is_array($icon_json)) {
                    error_log(print_r($icon_json, true));  // Logs to PHP error log for inspection
                }

                // Loop through svgs if it exists and is an array
                if (isset($icon_json[0]['svgs']) && is_array($icon_json[0]['svgs'])) {
                    // Insert rows with actual data from the SVG file
                    foreach ($icon_json[0]['svgs'] as $svg) {
                        global $wpdb;
                        $table_name = $wpdb->prefix . 'lcp_icons';

                        // Insert each SVG data into the database
                        $wpdb->insert(
                            $table_name,
                            array(
                                'icon_name' => $svg['name'],  // Using the name from the SVG JSON
                                'icon_set_id' => $selected_icon_set['id'],
                                'icon_family' => $selected_icon_set['setFamily'],  // Get family dynamically from the selected icon set
                                'icon_version' => $selected_icon_set['version'],  // Get version dynamically from the selected icon set
                                'paths' => ($svg['paths']),  // SVG paths from the JSON
                                'viewbox' => sanitize_text_field($svg['viewBox']), // Viewbox for the SVG
                                'icon_id' => sanitize_text_field($svg['id'])  // Using the actual icon ID from the JSON
                            )
                        );
                    }

                    wp_send_json_success(array('message' => 'Icon set installed and rows added with actual data.'));
                } else {
                    wp_send_json_error(array('message' => 'SVGs data not found in the JSON file.'));
                }
            } else {
                wp_send_json_error(array('message' => 'SVG file not found.'));
            }
        } else {
            wp_send_json_error(array('message' => 'Icon set not found.'));
        }
    } else {
        wp_send_json_error(array('message' => 'Icon definitions not found.'));
    }
}
add_action('wp_ajax_install_icon_set', 'mytheme_install_icon_set');



// Function to create the icons table in the database if it doesn't exist
// Function to create the icons table in the database if it doesn't exist
function mytheme_create_icons_table() {
    global $wpdb;

    $table_name = $wpdb->prefix . 'lcp_icons';
    $charset_collate = $wpdb->get_charset_collate();

    // SQL to create the table if it doesn't exist
    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,  -- Auto-increment for the ID
        icon_name VARCHAR(255),
        icon_set_id VARCHAR(255),
        icon_family VARCHAR(255),
        icon_version VARCHAR(50),
        paths TEXT,
        viewbox VARCHAR(50),
        icon_id VARCHAR(255) UNIQUE,  -- Unique identifier for each SVG (based on SVG 'id')
        PRIMARY KEY (id)
    ) $charset_collate;";

    // Include the necessary WordPress file to run dbDelta
    require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}


function mytheme_enqueue_dashboard_scripts($hook) {
    // Only load the script on the icon-management page


    // Enqueue JavaScript for AJAX
    wp_enqueue_script(
        'icon-import-script',
        get_template_directory_uri() . '/assets/js/icon-import.js',
        array(), // No dependencies for vanilla JS
        null,
        true
    );

    // Pass the AJAX URL to the script
    wp_localize_script('icon-import-script', 'mytheme_ajax', array(
        'ajax_url' => admin_url('admin-ajax.php')
    ));
}
add_action('admin_enqueue_scripts', 'mytheme_enqueue_dashboard_scripts');


// Handle the AJAX request for uninstalling icon sets
function mytheme_uninstall_icon_set() {
    // Ensure icon set ID is passed in the request
    if (!isset($_POST['icon_set_id'])) {
        wp_send_json_error(array('message' => 'Invalid icon set ID.'));
    }

    // Get the icon set ID from the request
    $icon_set_id = intval($_POST['icon_set_id']); // Ensure it's an integer

    global $wpdb;

    // Define the table name
    $table_name = $wpdb->prefix . 'lcp_icons';

    // Delete all rows where the icon_set_id matches the passed ID
    $deleted_rows = $wpdb->delete(
        $table_name,
        array('icon_set_id' => $icon_set_id), // Condition to match rows by icon_set_id
        array('%d') // Sanitize the value as an integer
    );

    // Check if rows were deleted successfully
    if ($deleted_rows) {
        wp_send_json_success(array('message' => 'Icon set uninstalled and icons removed from the database.'));
    } else {
        wp_send_json_error(array('message' => 'No icons found for the specified icon set ID.'));
    }
}

add_action('wp_ajax_uninstall_icon_set', 'mytheme_uninstall_icon_set');
