/ ===== 应用装配 ===== /

function switchTab(name) {
$$(".tab").forEach(b => b.classList.toggle("active", b.dataset.tab === name));
$$(".panel").forEach(p => p.classList.toggle("active", p.id === "tab-" + name));
if (name === "measure") Measure.draw();
if (name === "index" || name === "cost") recalcAll();
}

function newProject() {
if (!confirm("新建将清空当前项目(图纸、量算图元、苗木表、价格清单)。确定?")) return;
S.shapes = []; S.land = {}; S.plants = []; S.priceBook = {};
S.image = {dataUrl:"", w:0, h:0};
S.scale = {pxPerM:0, calibrated:false};
$("#projName").value = "";
$("#siteArea").value = 0;
$("#population").value = 0;
$("#waterAsGreen").checked = false;
Measure.restore();
PlantUI.renderTable();
PlantUI.syncPriceBookState();
renderLandTable();
recalcAll();
toast("已新建空白项目");
}

document.addEventListener("DOMContentLoaded", () => {
$$(".tab").forEach(b => b.onclick = () => switchTab(b.dataset.tab));

Measure.bind();
PlantUI.bind();
Exporter.bind();

// 基础参数变更 → 联动重算
["#projType", "#climate", "#siteArea", "#population", "#waterAsGreen"]

.forEach(s => $(s).addEventListener("change", recalcAll));

["#cPlanting", "#cMaint", "#cSoil", "#cPave", "#cRoad", "#cWater", "#cMep", "#cFurn", "#cRisk"]

.forEach(s => $(s).addEventListener("input", recalcAll));

$("#btnSave").onclick = () => saveLocal();
$("#btnLoad").onclick = () => $("#fileProject").click();
$("#btnNew").onclick = newProject;
$("#fileProject").onchange = e => {

const f = e.target.files[0];
if (!f) return;
const fr = new FileReader();
fr.onload = () => {
  try { applyState(JSON.parse(fr.result)); toast("工程存档已载入"); }
  catch (err) { toast("存档格式错误"); }
};
fr.readAsText(f);
e.target.value = "";

};

// 拖入 JSON 存档亦可直接恢复
document.addEventListener("drop", e => {

const f = e.dataTransfer && e.dataTransfer.files[0];
if (f && /\.json$/i.test(f.name)) {
  e.preventDefault();
  const fr = new FileReader();
  fr.onload = () => { try { applyState(JSON.parse(fr.result)); toast("工程存档已载入"); } catch (x) { toast("存档格式错误"); } };
  fr.readAsText(f);
}

});
document.addEventListener("dragover", e => {

if (e.dataTransfer && Array.from(e.dataTransfer.items || []).some(i => i.kind === "file")) e.preventDefault();

});

renderLandTable();
if (!loadLocalQuiet()) recalcAll();

// 每 30 秒静默存一次,避免误关网页丢工作量
setInterval(() => { if (S.shapes.length || S.plants.length) saveLocal(true); }, 30000);
});

function loadLocalQuiet() {
const raw = localStorage.getItem(LS_KEY);
if (!raw) return false;
try { applyState(JSON.parse(raw)); toast("已恢复上次未完成的工作"); return true; }
catch (e) { return false; }
}