import { getJson } from './api.js';
import { esc } from './sanitize.js';
export function createWebdavController(deps) {
var currentPath = '/';
var selectedPath = '';
var selectedName = '';
function browse(path) {
currentPath = path || '/';
var list = document.getElementById('lh-ai-webdav-list');
var pathLabel = document.getElementById('lh-ai-webdav-path-label');
if (list) list.innerHTML = '
Loading...
';
if (pathLabel) pathLabel.textContent = currentPath;
getJson('/api/admin/learning/webdav-browse?path=' + encodeURIComponent(currentPath))
.then(function(data) {
if (!data.success) {
if (list) list.innerHTML = '' + esc(data.error) + '
';
return;
}
if (pathLabel) pathLabel.textContent = data.path;
renderList(data);
})
.catch(function(err) {
if (list) list.innerHTML = '' + esc(err.message) + '
';
});
}
function renderList(data) {
var list = document.getElementById('lh-ai-webdav-list');
if (!list) return;
list.innerHTML = renderWebdavListHtml(data);
}
function openItem(el) {
if (!el) return;
if (el.dataset.isdir === '1') browse(el.dataset.path);
else selectFile(el.dataset.path, el.dataset.name);
}
function selectFile(path, name) {
selectedPath = path;
selectedName = name;
var browser = document.getElementById('lh-ai-webdav-browser');
var selDiv = document.getElementById('lh-ai-webdav-selected');
var selName = document.getElementById('lh-ai-webdav-selected-name');
if (browser) browser.style.display = 'none';
if (selDiv) selDiv.style.display = 'flex';
if (selName) selName.textContent = name;
}
function deselectFile() {
selectedPath = '';
selectedName = '';
var browser = document.getElementById('lh-ai-webdav-browser');
var selDiv = document.getElementById('lh-ai-webdav-selected');
if (selDiv) selDiv.style.display = 'none';
if (browser) browser.style.display = '';
}
return {
browse: browse,
deselectFile: deselectFile,
getCurrentPath: function() { return currentPath; },
getSelectedName: function() { return selectedName; },
getSelectedPath: function() { return selectedPath; },
openItem: openItem,
selectFile: selectFile,
setCurrentPath: function(path) { currentPath = path || '/'; }
};
}
export function renderWebdavListHtml(data) {
var html = '';
if (data.path !== '/' && data.path !== data.parentPath) {
html += '' +
' ..
';
}
if (data.items.length === 0 && html === '') {
return 'Empty folder
';
}
data.items.forEach(function(item) {
var icon = item.isDir ? 'fa-folder' : getFileIcon(item.contentType, item.name);
var iconColor = item.isDir ? 'var(--amber)' : 'var(--blue)';
var sizeStr = (!item.isDir && item.size)
? ' (' + formatBytes(item.size) + ')'
: '';
html += '' +
'' +
'' + esc(item.name) + '' + sizeStr +
'
';
});
return html;
}
export function getFileIcon(mime, name) {
if (!name) name = '';
var ext = name.split('.').pop().toLowerCase();
if (mime && mime.includes('pdf') || ext === 'pdf') return 'fa-file-pdf';
if (['doc', 'docx'].includes(ext)) return 'fa-file-word';
if (['txt', 'md'].includes(ext)) return 'fa-file-lines';
if (['html', 'htm'].includes(ext)) return 'fa-file-code';
return 'fa-file';
}
export function formatBytes(bytes) {
if (bytes < 1024) return bytes + ' B';
if (bytes < 1024 * 1024) return (bytes / 1024).toFixed(0) + ' KB';
return (bytes / 1024 / 1024).toFixed(1) + ' MB';
}