<?php
// Exit if accessed directly.
if (!defined('ABSPATH')) {
    exit;
}

/**
 * ================================================================
 *  1. INITIAL SETUP & VARIABLE DECLARATIONS
 * ================================================================
 */
$integrazo_wz_form_id = INTEGRAZO_WZ_Util::get_event_value($integrazo_wz_integration_data);
$integrazo_wz_selected_module = $integrazo_wz_integration_data['integrazo_wz_module'] ?? '';

// Modules allowed for this product in the free version (others require Pro).
global $integrazo_wz_allowed_modules;
$integrazo_wz_allowed_zoho_modules = $integrazo_wz_allowed_modules['zoho_crm'] ?? [];
// Zoho CRM client (expects $integrazo_wz_account_details with dc/tokens as you already pass)
$integrazo_wz_zohocrm_instance = new INTEGRAZO_WZ_Zoho_CRM($integrazo_wz_account_details);

// Fetch modules (array of modules or error structure)
$integrazo_wz_modules = $integrazo_wz_zohocrm_instance->get_modules();
$integrazo_wz_record_action_options =  $integrazo_wz_zohocrm_instance->record_action_options();
$integrazo_wz_general_modules  = [];
$integrazo_wz_custom_modules   = [];

/**
 * Flag: treat as a valid list (array of rows), not an error wrapper.
 * $integrazo_wz_modules like:
 *   [
 *     ['api_name' => 'Leads', 'plural_label' => 'Leads', 'generated_type' => 'default', ...],
 *     ...
 *   ]
 */
$integrazo_wz_has_modules_list = (is_array($integrazo_wz_modules) && isset($integrazo_wz_modules[0]) && is_array($integrazo_wz_modules[0]));

// Show notices if error
if (is_array($integrazo_wz_modules)) {
    // Wrapper error (our SDK-style)
    if (isset($integrazo_wz_modules['error']) && is_string($integrazo_wz_modules['error'])) {
        printf(
            '<div class="notice notice-error is-dismissible"><p>%s</p></div>',
            esc_html($integrazo_wz_modules['error'])
        );
    }
    // Zoho error payload (category/message pattern)
    if (isset($integrazo_wz_modules['category'])) {
        $integrazo_wz_msg = $integrazo_wz_modules['message'] ?? __('Failed to retrieve modules.', 'integrazo-integration-for-zoho-apps');
        printf(
            '<div class="notice notice-error is-dismissible"><p>%s</p></div>',
            esc_html($integrazo_wz_msg)
        );
    }
}

// Build bucketed lists when valid
if ($integrazo_wz_has_modules_list) {
    foreach ($integrazo_wz_modules as $integrazo_wz_module) {
        if (!empty($integrazo_wz_module['api_name']) && !empty($integrazo_wz_module['plural_label'])) {
            if (!empty($integrazo_wz_module['generated_type']) && $integrazo_wz_module['generated_type'] === 'custom') {
                $integrazo_wz_custom_modules[] = $integrazo_wz_module;
            } else {
                $integrazo_wz_general_modules[] = $integrazo_wz_module;
            }
        }
    }
}

// Free version: list allowed (enabled) modules first, disabled modules after.
// Pro (valid session): keep the modules in their normal/original order.
if (empty($session) && !empty($integrazo_wz_general_modules)) {
    $integrazo_wz_allowed_general_modules = [];
    $integrazo_wz_disabled_general_modules = [];

    foreach ($integrazo_wz_general_modules as $integrazo_wz_module) {
        if (in_array($integrazo_wz_module['api_name'], $integrazo_wz_allowed_zoho_modules, true)) {
            $integrazo_wz_allowed_general_modules[] = $integrazo_wz_module;
        } else {
            $integrazo_wz_disabled_general_modules[] = $integrazo_wz_module;
        }
    }

    $integrazo_wz_general_modules = array_merge($integrazo_wz_allowed_general_modules, $integrazo_wz_disabled_general_modules);
}

?>
<form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>">
    <?php wp_nonce_field('integrazo_wz_field_mapping_action', 'integrazo_wz_field_mapping_nonce'); ?>
    <input type="hidden" name="action" value="integrazo_wz_handle_field_mapping_step" />
    <input type="hidden" name="integration_id" value="<?php echo esc_attr($integrazo_wz_integration_id); ?>" />

    <?php
    $integrazo_wz_event_html = is_string($integrazo_wz_event) ? $integrazo_wz_event : '';
    echo wp_kses($integrazo_wz_event_html, INTEGRAZO_WZ_Plugin_Input_Renderer::allowed_admin_html());
    ?>

    <?php if ($integrazo_wz_has_modules_list) : ?>
        <!-- Module Selection -->
        <div style="display:flex;align-items:center;margin-bottom:15px;">
            <label for="integrazo_wz_module_select" class="integrazo-wz-setup-lable" style="width:170px;margin-right:10px;">
                <?php esc_html_e('Select Module:', 'integrazo-integration-for-zoho-apps'); ?>
                <div class="integrazo-wz-helpicon-help-icon-wrapper" style="display:inline-block;margin-left:5px;">
                    <span class="integrazo-wz-helpicon-help-icon">?</span>
                    <div class="integrazo-wz-helpicon-help-tooltip">
                        <p><?php esc_html_e('Choose the Zoho CRM module that will receive the data.', 'integrazo-integration-for-zoho-apps'); ?></p>
                    </div>
                </div>
            </label>

            <select name="integrazo_wz_module" id="integrazo_wz_module_select" class="regular-text integrazo-wz-setup-select-change" style="width:60%;">
                <option value=""><?php esc_html_e('Select', 'integrazo-integration-for-zoho-apps'); ?></option>

                <?php if (!empty($integrazo_wz_general_modules)) : ?>
                    <optgroup label="<?php esc_attr_e('General Modules', 'integrazo-integration-for-zoho-apps'); ?>">
                        <?php foreach ($integrazo_wz_general_modules as $integrazo_wz_module) :
                            $integrazo_wz_module_is_allowed = !empty($session) || in_array($integrazo_wz_module['api_name'], $integrazo_wz_allowed_zoho_modules, true);
                        ?>
                            <option
                                value="<?php echo esc_attr($integrazo_wz_module['api_name']); ?>"
                                <?php echo $integrazo_wz_module_is_allowed ? 'style="color:blue;"' : 'disabled title="' . esc_attr__('Upgrade to Pro to continue using this module.', 'integrazo-integration-for-zoho-apps') . '"'; ?>
                                <?php selected($integrazo_wz_module['api_name'], $integrazo_wz_selected_module); ?>>
                                <?php echo esc_html($integrazo_wz_module['plural_label'] . (!$integrazo_wz_module_is_allowed ? ' ' . __('(Pro)', 'integrazo-integration-for-zoho-apps') : '')); ?>
                            </option>
                        <?php endforeach; ?>
                    </optgroup>
                <?php endif; ?>

                <?php if (!empty($integrazo_wz_custom_modules)) : ?>
                    <optgroup label="<?php esc_attr_e('Custom Modules', 'integrazo-integration-for-zoho-apps'); ?>">
                        <?php foreach ($integrazo_wz_custom_modules as $integrazo_wz_module) : ?>
                            <option
                                value="<?php echo esc_attr('integrazo_wz_cm_' . $integrazo_wz_module['api_name']); ?>"
                                <?php echo empty($session) ? 'disabled title="' . esc_attr__('Upgrade to Pro to continue using this module.', 'integrazo-integration-for-zoho-apps') . '"' : 'style="color:blue;"'; ?>
                                <?php selected('integrazo_wz_cm_' . $integrazo_wz_module['api_name'], $integrazo_wz_selected_module); ?>>
                                <?php echo esc_html($integrazo_wz_module['plural_label'] . (empty($session) ? ' ' . __('(Pro)', 'integrazo-integration-for-zoho-apps') : '')); ?>
                            </option>
                        <?php endforeach; ?>
                    </optgroup>
                <?php endif; ?>

            </select>
        </div>
    <?php endif; ?>

    <!-- Save & Next Button (hidden only when a module is selected) -->
    <!-- Save & Next Button -->
    <div class="integrazo-wz-setup-next-btn-wrapper integrazo-wz-setup-step2-save-btn">
        <button
            type="submit"
            id="integrazo_wz_setup_next_button"
            name="integrazo_wz_next"
            class="button button-primary"
            style="<?php echo esc_attr((!empty($integrazo_wz_form_id) && !empty($integrazo_wz_selected_module)) ? 'display:none;' : ''); ?>">
            <?php esc_html_e('Save & Next', 'integrazo-integration-for-zoho-apps'); ?>
        </button>
    </div>

</form>

<?php
/**
 * ================================================================
 *  2. MAPPING UI (ONLY IF A MODULE IS SELECTED)
 * ================================================================
 */
if (!empty($integrazo_wz_form_id) && !empty($integrazo_wz_selected_module)) {
    // Handle custom module prefix
    if (strpos($integrazo_wz_selected_module, 'integrazo_wz_cm_') === 0) {
        $integrazo_wz_selected_module = substr($integrazo_wz_selected_module, strlen('integrazo_wz_cm_'));
    }

    // Fetch fields for selected module
    $integrazo_wz_raw_crm_fields = $integrazo_wz_zohocrm_instance->get_module_fields($integrazo_wz_selected_module);
    $integrazo_wz_normalized_crm_fields = [];

    // Normalize Zoho CRM fields (respect custom_field and api_name)
    if (!empty($integrazo_wz_raw_crm_fields['fields']) && is_array($integrazo_wz_raw_crm_fields['fields'])) {
        foreach ($integrazo_wz_raw_crm_fields['fields'] as $integrazo_wz_field) {
            $integrazo_wz_api_name = $integrazo_wz_field['api_name'] ?? '';
            if ($integrazo_wz_api_name === '' || $integrazo_wz_api_name === 'Tag') {
                continue; // skip empty or Tag fields
            }

            if (!empty($integrazo_wz_field['custom_field'])) {
                $integrazo_wz_api_name = 'integrazo_wz_cf_' . $integrazo_wz_api_name;
            }

            $integrazo_wz_normalized_crm_fields[] = [
                'api_name'         => $integrazo_wz_api_name,
                'field_label'      => $integrazo_wz_field['field_label'] ?? ($integrazo_wz_field['display_label'] ?? $integrazo_wz_api_name),
                'system_mandatory' => !empty($integrazo_wz_field['system_mandatory']),
                'pick_list_values' => $integrazo_wz_field['pick_list_values'] ?? [],
                'data_type'        => $integrazo_wz_field['data_type'] ?? '',
                'is_custom'        => !empty($integrazo_wz_field['custom_field']),
            ];
        }
    }


    // Append plugin-specific fields if provided
    if (!empty($integrazo_wz_additional_fields[$integrazo_wz_to_product]) && is_array($integrazo_wz_additional_fields[$integrazo_wz_to_product])) {
        foreach ($integrazo_wz_additional_fields[$integrazo_wz_to_product] as $integrazo_wz_field) {
            if (!empty($integrazo_wz_field['api_name']) && !empty($integrazo_wz_field['label_name'])) {
                $integrazo_wz_normalized_crm_fields[] = [
                    'api_name'         => $integrazo_wz_field['api_name'],
                    'field_label'      => $integrazo_wz_field['label_name'],
                    'system_mandatory' => false,
                    'pick_list_values' => [],
                    'data_type'        => 'integrazo_wz_data_type',
                    'is_custom'        => false,
                ];
            }
        }
    }

    // Load the shared pre-mapping UI
    require_once INTEGRAZO_WZ_PLUGIN_DIR . 'src/products/pre-mapping.php';
}
?>