// AGÊNCIA LOGUE — store persistente (localStorage) + reativo. Exporta window.LogueStore.
(function () {
  const LS = "logue_os_v4";
  const clone = (x) => JSON.parse(JSON.stringify(x));
  const hoje = () => new Date().toLocaleDateString("pt-BR");
  const uid = (p) => p + Math.random().toString(36).slice(2, 8);
  const METAS_PADRAO = [
    "Prospectar 5 marcas novas no Instagram e salvar contatos",
    "Enviar 3 mensagens de abertura pra leads potenciais",
    "Fazer follow-up com 2 leads em negociação",
    "Postar 1 conteúdo de autoridade que gere prova social",
    "Pedir 1 indicação a um cliente atual",
  ];
  function seedMetas() { return { data: hoje(), itens: METAS_PADRAO.map((t) => ({ id: uid("m"), t, done: false })) }; }
  function seed() { return { clientes: clone(window.DEMO_CLIENTS || []), leads: clone(window.DEMO_CRM || []), metas: seedMetas() }; }
  function rollMetas(m) {
    // mantém os textos das metas, zera os checks a cada novo dia
    if (!m || !m.itens || !m.itens.length) return seedMetas();
    if (m.data === hoje()) return m;
    return { data: hoje(), itens: m.itens.map((x) => ({ id: x.id || uid("m"), t: x.t, done: false })) };
  }
  function load() {
    try { const r = localStorage.getItem(LS); if (r) { const s = JSON.parse(r); if (s && s.clientes && s.leads) { s.metas = rollMetas(s.metas); return s; } } } catch (e) {}
    return seed();
  }
  let state = load();
  const subs = new Set();
  const CLOUD_ID = "lorenna-logue";
  function save() { try { localStorage.setItem(LS, JSON.stringify(state)); } catch (e) {} if (window.ESTUDIO_CLOUD) window.ESTUDIO_CLOUD.push(CLOUD_ID, state); }
  function set(mut) { const next = clone(state); mut(next); state = next; save(); subs.forEach((f) => f()); }
  const cli = (s, id) => s.clientes.find((x) => x.id === id);
  // Ao abrir: puxa o estado da nuvem (se houver) e sobrepõe o local.
  if (window.ESTUDIO_CLOUD && window.ESTUDIO_CLOUD.enabled()) {
    window.ESTUDIO_CLOUD.pull(CLOUD_ID).then((remote) => {
      if (remote && remote.clientes && remote.leads) {
        remote.metas = rollMetas(remote.metas);
        state = remote; save(); subs.forEach((f) => f());
      }
    });
  }

  const Store = {
    get: () => state,
    subscribe: (f) => { subs.add(f); return () => subs.delete(f); },
    reset: () => { state = seed(); save(); subs.forEach((f) => f()); },

    // ── METAS DIÁRIAS (comercial) — zeram os checks a cada dia ──
    toggleMeta: (id) => set((s) => { const m = (s.metas.itens || []).find((x) => x.id === id); if (m) m.done = !m.done; }),
    updateMeta: (id, t) => set((s) => { const m = (s.metas.itens || []).find((x) => x.id === id); if (m) m.t = t; }),
    addMeta: () => set((s) => { s.metas.itens.push({ id: uid("m"), t: "Nova ação diária", done: false }); }),
    deleteMeta: (id) => set((s) => { s.metas.itens = s.metas.itens.filter((x) => x.id !== id); }),
    resetMetas: () => set((s) => { s.metas = { data: hoje(), itens: (s.metas.itens || []).map((x) => ({ id: x.id, t: x.t, done: false })) }; }),

    // ── LEADS (comercial) ──
    moveLead: (id, status) => set((s) => { const l = s.leads.find((x) => x.id === id); if (l) l.status = status; }),
    reorderLead: (id, beforeId) => set((s) => {
      const i = s.leads.findIndex((x) => x.id === id); if (i < 0) return;
      const [it] = s.leads.splice(i, 1);
      const j = beforeId ? s.leads.findIndex((x) => x.id === beforeId) : s.leads.length;
      s.leads.splice(j < 0 ? s.leads.length : j, 0, it);
    }),
    updateLead: (id, patch) => set((s) => { const l = s.leads.find((x) => x.id === id); if (l) Object.assign(l, patch); }),
    addLead: (status) => { const id = uid("lead"); set((s) => { s.leads.push({ id, nome: "Novo lead", tipo: "marca", status, plataforma: "instagram", proposta: "", valor: 1200, proxima: "", followup: "", notas: "" }); }); return id; },
    deleteLead: (id) => set((s) => { s.leads = s.leads.filter((x) => x.id !== id); }),

    // ── CLIENTES ──
    updateClient: (id, patch) => set((s) => { const c = cli(s, id); if (c) Object.assign(c, patch); }),
    updatePayment: (id, patch) => set((s) => { const c = cli(s, id); if (c) Object.assign(c.pagamento, patch); }),
    updateContrato: (id, patch) => set((s) => { const c = cli(s, id); if (c) Object.assign(c.contrato, patch); }),
    addClient: () => { const id = uid("cl"); set((s) => { s.clientes.push({ id, nome: "Novo cliente", setor: "", cor: "var(--e-social)", receita: 0, inicio: "2026", contato: "", whatsapp: "", pacote: "6 vídeos/mês · captação e edição", contrato: { valor: 0, prazo: "Mensal recorrente", ajustes: "1 rodada por peça", assinado: "2026" }, pagamento: { dia: 10, forma: "PIX", status_mes: "pendente", historico: [] }, tarefas: [], insights: [] }); }); return id; },
    deleteClient: (id) => set((s) => { s.clientes = s.clientes.filter((x) => x.id !== id); }),

    // ── TAREFAS ──
    addTask: (cid, titulo) => set((s) => { const c = cli(s, cid); if (c) { (c.tarefas = c.tarefas || []).push({ id: uid("t"), titulo: titulo || "Nova tarefa", status: "pendente", deadline: "", prioridade: "media" }); } }),
    updateTask: (cid, tid, patch) => set((s) => { const c = cli(s, cid); if (c) { const t = (c.tarefas || []).find((x) => x.id === tid); if (t) Object.assign(t, patch); } }),
    toggleTask: (cid, tid) => set((s) => { const c = cli(s, cid); if (c) { const t = (c.tarefas || []).find((x) => x.id === tid); if (t) t.status = t.status === "concluida" ? "pendente" : "concluida"; } }),
    deleteTask: (cid, tid) => set((s) => { const c = cli(s, cid); if (c) c.tarefas = (c.tarefas || []).filter((x) => x.id !== tid); }),
    reorderTask: (cid, id, beforeId) => set((s) => {
      const c = cli(s, cid); if (!c || !c.tarefas) return;
      const i = c.tarefas.findIndex((x) => x.id === id); if (i < 0) return;
      const [it] = c.tarefas.splice(i, 1);
      const j = beforeId ? c.tarefas.findIndex((x) => x.id === beforeId) : c.tarefas.length;
      c.tarefas.splice(j < 0 ? c.tarefas.length : j, 0, it);
    }),

    // ── IDEIAS (insights) ──
    addIdea: (cid) => set((s) => { const c = cli(s, cid); if (c) { (c.insights = c.insights || []).push({ titulo: "Nova ideia", custo: "Custo zero", ideia: "" }); } }),
    updateIdea: (cid, idx, patch) => set((s) => { const c = cli(s, cid); if (c && c.insights[idx]) Object.assign(c.insights[idx], patch); }),
    deleteIdea: (cid, idx) => set((s) => { const c = cli(s, cid); if (c) c.insights = (c.insights || []).filter((_, i) => i !== idx); }),
  };
  window.LogueStore = Store;
})();
