/**
* doc-picker.js — Document / Audio corpus picker for tool pages.
*
* Wires the "Select from My Docs" and "Select from My Audio" buttons.
* Free-tier (SSO) users see an upgrade modal instead of the picker.
* Paid (CaveauAI) users get a searchable multi-select modal backed by
* /api/dashboard/documents.php?action=list.
*/
(function () {
'use strict';
// ── Tier detection ────────────────────────────────────────────────────────
// DBN_FREE_TIER_BALANCE is set only for SSO (free) users.
// Paid CaveauAI sessions have it undefined.
function isPaidUser() {
return window.DBN_TOOLS_AUTHENTICATED === true
&& typeof window.DBN_FREE_TIER_BALANCE === 'undefined';
}
// ── Upgrade modal ─────────────────────────────────────────────────────────
var upgradeBackdrop = document.getElementById('docPickerUpgradeBackdrop');
function showUpgradeModal() {
if (upgradeBackdrop) upgradeBackdrop.hidden = false;
}
if (upgradeBackdrop) {
var upgradeClose = upgradeBackdrop.querySelector('.doc-picker-upgrade-card__dismiss');
if (upgradeClose) {
upgradeClose.addEventListener('click', function () {
upgradeBackdrop.hidden = true;
});
}
upgradeBackdrop.addEventListener('click', function (e) {
if (e.target === upgradeBackdrop) upgradeBackdrop.hidden = true;
});
}
// ── Shared picker state ───────────────────────────────────────────────────
var backdrop = document.getElementById('docPickerBackdrop');
var searchEl = backdrop ? backdrop.querySelector('.doc-picker-dialog__search') : null;
var listEl = backdrop ? backdrop.querySelector('.doc-picker-list') : null;
var countEl = backdrop ? backdrop.querySelector('.doc-picker-dialog__count') : null;
var confirmBtn = backdrop ? backdrop.querySelector('.doc-picker-dialog__confirm') : null;
var titleEl = backdrop ? backdrop.querySelector('.doc-picker-dialog__head h3') : null;
var _allDocs = []; // full list from API
var _selected = {}; // { id: { id, title } }
var _mode = 'text'; // 'text' or 'audio'
var _onConfirm = null; // callback(selected)
function openPicker(mode, onConfirm) {
_mode = mode || 'text';
_onConfirm = onConfirm;
_allDocs = [];
if (titleEl) {
titleEl.textContent = mode === 'audio' ? 'Select from My Audio' : 'Select from My Docs';
}
if (searchEl) searchEl.value = '';
if (listEl) listEl.innerHTML = '