`;
managementListContainer.appendChild(item);
});
}
// --- EVENT HANDLERS & LOGIC ---
function switchTab(tabName) {
state.currentTab = tabName;
Object.values(tabs).forEach(tab => tab.classList.remove('active'));
Object.values(contents).forEach(content => content.classList.add('hidden'));
tabs[tabName].classList.add('active');
contents[tabName].classList.remove('hidden');
updateNavButtons();
}
function updateNavButtons() {
navButtons.prev.disabled = state.currentTab === 'dashboard';
navButtons.next.disabled = state.currentTab === 'management';
}
filingForm.addEventListener('submit', (e) => {
e.preventDefault();
const filingData = {
id: state.editingFilingId ? state.editingFilingId : Date.now(),
caseName: caseNameInput.value.trim(),
jurisdiction: jurisdictionInput.value.trim(),
filingType: filingTypeInput.value.trim(),
deadline: deadlineDateInput.value,
status: filingStatusSelect.value
};
if (state.editingFilingId) {
const index = state.filings.findIndex(f => f.id === state.editingFilingId);
if (index !== -1) state.filings[index] = filingData;
} else {
state.filings.push(filingData);
}
resetFilingForm();
renderAll();
});
managementListContainer.addEventListener('click', (e) => {
const target = e.target;
const id = parseInt(target.dataset.id);
if (target.classList.contains('edit-filing-btn')) {
const filing = state.filings.find(f => f.id === id);
if (filing) {
formTitle.textContent = 'Edit Filing Deadline';
state.editingFilingId = filing.id;
caseNameInput.value = filing.caseName;
jurisdictionInput.value = filing.jurisdiction;
filingTypeInput.value = filing.filingType;
deadlineDateInput.value = filing.deadline;
filingStatusSelect.value = filing.status;
cancelEditBtn.classList.remove('hidden');
filingForm.querySelector('button[type="submit"]').textContent = 'Update Deadline';
window.scrollTo({ top: 0, behavior: 'smooth' });
}
} else if (target.classList.contains('delete-filing-btn')) {
if (confirm('Are you sure you want to delete this filing deadline?')) {
state.filings = state.filings.filter(f => f.id !== id);
renderAll();
}
}
});
downloadPdfBtn.addEventListener('click', () => {
const { jsPDF } = window.jspdf;
const doc = new jsPDF({ orientation: 'landscape' });
doc.setFontSize(20);
doc.text("Court Filing Deadline Report", 14, 22);
doc.setFontSize(11);
doc.setTextColor(100);
doc.text(`Report Generated: ${new Date().toLocaleDateString()}`, 14, 30);
const head = [['Case Name / No.', 'Jurisdiction', 'Filing', 'Deadline', 'Status', 'Days Remaining']];
const body = state.filings
.sort((a, b) => new Date(a.deadline) - new Date(b.deadline))
.map(filing => {
const daysRemaining = getDaysRemaining(filing.deadline);
let daysText = `${daysRemaining}`;
if (filing.status === 'Filed') daysText = 'N/A';
else if (daysRemaining < 0) daysText = `Overdue (${Math.abs(daysRemaining)})`;
return [
filing.caseName,
filing.jurisdiction,
filing.filingType,
filing.deadline,
filing.status,
daysText
];
});
doc.autoTable({
startY: 35,
head: head,
body: body,
theme: 'striped',
headStyles: { fillColor: [79, 70, 229] }, // indigo-600
});
doc.save('court_filing_deadlines.pdf');
});
function resetFilingForm() {
filingForm.reset();
state.editingFilingId = null;
formTitle.textContent = 'Add New Filing Deadline';
cancelEditBtn.classList.add('hidden');
filingForm.querySelector('button[type="submit"]').textContent = 'Save Deadline';
}
// --- ATTACH EVENT LISTENERS ---
tabs.dashboard.addEventListener('click', () => switchTab('dashboard'));
tabs.management.addEventListener('click', () => switchTab('management'));
navButtons.next.addEventListener('click', () => switchTab('management'));
navButtons.prev.addEventListener('click', () => switchTab('dashboard'));
cancelEditBtn.addEventListener('click', resetFilingForm);
// --- INITIALIZATION ---
function init() {
loadInitialData();
renderAll();
updateNavButtons();
}
init();
});