import { settingsApi, auth, system as systemApi, services as servicesApi } from '../api.js';
import { icons } from '../icons.js';
export function renderSettings(container) {
let queueStatus = null;
let version = null;
let interval;
container.innerHTML = `
${icons.gitBranch(16)} Connessione Gitea
Testa la connessione al server Gitea configurato
Test Connessione
${icons.bell(16)} Notifiche Telegram
Invia un messaggio di test al bot Telegram configurato
Test Telegram
${icons.database(16)} Build Queue
${icons.key(16)} Cambia Password
${icons.refreshCw(16)} Self-Update
Aggiorna AutoDeployer all'ultima versione. Il servizio si riavvierà automaticamente.
Aggiorna AutoDeployer
${icons.trash2(16)} Pulizia Container Orfani
Rimuovi container temporanei rimasti da deploy falliti.
Scansiona e Pulisci
${icons.hardDrive(16)} Pulizia Immagini Vecchie
Rimuovi immagini Docker obsolete, mantenendo le 2 più recenti per servizio.
Pulisci Immagini
`;
// Gitea test
document.getElementById('test-gitea').onclick = async () => {
const btn = document.getElementById('test-gitea');
btn.textContent = '⏳ Testing...'; btn.disabled = true;
const res = document.getElementById('gitea-result');
try {
const r = await settingsApi.testGitea();
res.innerHTML = r.ok ? `${icons.checkCircle(16)} Connesso come ${r.user} ` : `${icons.xCircle(16)} ${r.error}`;
} catch (err) { res.innerHTML = `${icons.xCircle(16)} ${err.message}`; }
res.classList.remove('hidden'); btn.textContent = 'Test Connessione'; btn.disabled = false;
};
// Telegram test
document.getElementById('test-telegram').onclick = async () => {
const btn = document.getElementById('test-telegram');
btn.textContent = '⏳ Testing...'; btn.disabled = true;
const res = document.getElementById('telegram-result');
try {
const r = await settingsApi.testTelegram();
res.innerHTML = r.ok ? `${icons.checkCircle(16)} Messaggio inviato` : `${icons.xCircle(16)} ${r.error}`;
} catch (err) { res.innerHTML = `${icons.xCircle(16)} ${err.message}`; }
res.classList.remove('hidden'); btn.textContent = 'Test Telegram'; btn.disabled = false;
};
// Queue status
async function loadQueue() {
try {
queueStatus = await settingsApi.queueStatus();
document.getElementById('queue-content').innerHTML = `
In Attesa
${queueStatus.waiting}
Attive
${queueStatus.active}
Completate
${queueStatus.completed}
Fallite
${queueStatus.failed}
`;
} catch {}
}
// Version
async function loadVersion() {
try {
version = await systemApi.version();
document.getElementById('version-info').innerHTML = `Versione: ${version.commit} (${version.branch})${version.date} `;
} catch {}
}
// Password
document.getElementById('pw-form').onsubmit = async (e) => {
e.preventDefault();
const msg = document.getElementById('pw-msg');
msg.classList.add('hidden');
const newPw = document.getElementById('pw-new').value;
const confirm = document.getElementById('pw-confirm').value;
if (newPw !== confirm) { msg.textContent = 'Le password non coincidono'; msg.classList.remove('hidden'); return; }
try {
await auth.changePassword(document.getElementById('pw-current').value, newPw);
msg.textContent = '✅ Password aggiornata'; msg.classList.remove('hidden');
document.getElementById('pw-form').reset();
} catch (err) { msg.textContent = '❌ ' + err.message; msg.classList.remove('hidden'); }
};
// Self-update
document.getElementById('self-update').onclick = async () => {
const btn = document.getElementById('self-update');
btn.textContent = 'Aggiornamento...'; btn.disabled = true;
const res = document.getElementById('update-result');
try {
await systemApi.selfUpdate();
res.innerHTML = `${icons.checkCircle(14)} Update avviato. AutoDeployer si riavvierà a breve.`;
} catch (err) { res.innerHTML = `${icons.xCircle(14)} ${err.message}`; }
res.classList.remove('hidden'); btn.textContent = 'Aggiorna AutoDeployer'; btn.disabled = false;
};
// Cleanup
document.getElementById('cleanup-btn').onclick = async () => {
const btn = document.getElementById('cleanup-btn');
btn.textContent = 'Scansione...'; btn.disabled = true;
const res = document.getElementById('cleanup-result');
try {
const r = await servicesApi.cleanup();
res.textContent = `${r.orphans_found} orfani trovati, ${r.results?.filter(x => x.status === 'removed').length || 0} rimossi`;
} catch (err) { res.innerHTML = `${err.message} `; }
res.classList.remove('hidden'); btn.textContent = 'Scansiona e Pulisci'; btn.disabled = false;
};
// Prune
document.getElementById('prune-btn').onclick = async () => {
const btn = document.getElementById('prune-btn');
btn.textContent = 'Pulizia...'; btn.disabled = true;
const res = document.getElementById('prune-result');
try {
const r = await servicesApi.pruneImages();
res.textContent = `${r.results?.filter(x => x.status === 'removed').length || 0} immagini rimosse`;
} catch (err) { res.innerHTML = `${err.message} `; }
res.classList.remove('hidden'); btn.textContent = 'Pulisci Immagini'; btn.disabled = false;
};
loadQueue();
loadVersion();
interval = setInterval(loadQueue, 10000);
return () => clearInterval(interval);
}