const Storage = {
saveTemplate(name, desc) {return Templates.saveCurrent(name, desc);},
exportAll() {
return {
template: {
paperSize: document.getElementById('paper-size').value,
components: Pro.components.map(c => ({type: c.type, data: {...c.data}}))
},
data: Pro.data,
items: Pro.items
};
},
importAll(obj) {
if (obj.template) {
document.getElementById('paper-size').value = obj.template.paperSize || '80mm';
changePaperSize();
Pro.components = (obj.template.components || []).map(c => ({id: 'comp-' + (Pro.idCounter++), type: c.type, data: {...c.data}}));
document.getElementById('drop-zone').innerHTML = '';
Pro.components.forEach(renderComponent);
}
if (obj.data) {Pro.data = {...Pro.data, ...obj.data, store: {...Pro.data.store, ...obj.data.store}, receipt: {...Pro.data.receipt, ...obj.data.receipt}}; fillDataForm();}
if (Array.isArray(obj.items)) Pro.items = obj.items.map(it => ({...it}));
renderItems();
},
// Receipts archive (for reprint)
saveReceipt() {
const snapshot = {
id: Pro.data.receipt.id || ('INV-' + Date.now()),
ts: Date.now(),
template: {paperSize: document.getElementById('paper-size').value, components: Pro.components.map(c => ({type: c.type, data: {...c.data}}))},
data: JSON.parse(JSON.stringify(Pro.data)),
items: JSON.parse(JSON.stringify(Pro.items))
};
const arr = JSON.parse(localStorage.getItem('pro.receipts') || '[]');
arr.unshift(snapshot);
localStorage.setItem('pro.receipts', JSON.stringify(arr));
// Best-effort: also send to server storage
try {apiSaveReceipt(snapshot).catch(() => {});} catch (e) {}
return snapshot;
},
listReceipts() {return JSON.parse(localStorage.getItem('pro.receipts') || '[]');},
loadReceipt(id) {
const r = Storage.listReceipts().find(x => x.id === id);
if (!r) return;
Storage.importAll({template: r.template, data: r.data, items: r.items});
}
};
// API placeholders (PHP/MySQL ready)
async function apiSaveReceipt(snapshot) {
// POST to api/save_receipt.php
try {
const res = await fetch('api/save_receipt.php', {method: 'POST', headers: {'Content-Type': 'application/json'}, body: JSON.stringify(snapshot)});
return await res.json();
} catch (e) {return {ok: false, error: String(e)}}
}
async function apiListReceipts() {
try {
const res = await fetch('api/list_receipts.php');
return await res.json();
} catch (e) {return {ok: false, error: String(e)}}
}