// data.jsx — mock data for SyncBridge

const TENANT = {
  id: 'tnt_8a4f2c',
  store_name: 'Casa Bonita Decor',
  nuvemshop_store_id: '4892311',
  email: 'gabriela@casabonita.com.br',
  plan: 'Growth',
  credits_used: 3420,
  credits_total: 5000,
  created_at: '2025-11-12',
  status: 'active',
};

const KPIS = [
  { id: 'orders', label: 'Pedidos sincronizados', value: 1248, delta: 12.4, foot: 'últimos 30 dias', icon: 'lucide:shopping-bag', color: 'var(--accent)' },
  { id: 'leads', label: 'Leads adicionados', value: 384, delta: 8.1, foot: 'últimos 30 dias', icon: 'lucide:user-plus', color: 'var(--cyan)' },
  { id: 'carts', label: 'Carrinhos recuperados', value: 67, delta: 24.0, foot: 'últimos 30 dias', icon: 'lucide:shopping-cart', color: 'var(--green)' },
  { id: 'products', label: 'Produtos atualizados', value: 892, delta: -2.3, foot: 'última sync há 4h', icon: 'lucide:package', color: 'var(--pink)' },
];

// 14 days of execution data
const CHART_14D = (() => {
  const days = [];
  const today = new Date('2026-04-19');
  for (let i = 13; i >= 0; i--) {
    const d = new Date(today);
    d.setDate(d.getDate() - i);
    const ok = 80 + Math.floor(Math.sin(i * 0.7) * 30 + Math.random() * 50);
    const err = Math.max(0, Math.floor(Math.random() * 8 - (i % 4 === 0 ? -4 : 1)));
    days.push({
      date: d.toISOString().slice(0, 10),
      label: d.toLocaleDateString('pt-BR', { day: '2-digit', month: 'short' }),
      ok, err,
    });
  }
  return days;
})();

const FUNCTIONS = [
  'fn-webhook-router',
  'fn-abandoned-carts',
  'fn-sync-leads',
  'fn-sync-catalog',
  'fn-sync-orders',
];

const TENANTS = [
  { id: 'tnt_8a4f2c', name: 'Casa Bonita Decor', plan: 'Growth', execs: 3420, success: 98.2, lastSeen: '2 min', status: 'healthy' },
  { id: 'tnt_2b91d8', name: 'Loja do Surfista', plan: 'Starter', execs: 842, success: 99.1, lastSeen: '12 min', status: 'healthy' },
  { id: 'tnt_4c7e0a', name: 'Pets & Cia', plan: 'Growth', execs: 5120, success: 94.8, lastSeen: '1 min', status: 'warn' },
  { id: 'tnt_9f3ab2', name: 'Atelier Costura Feliz', plan: 'Starter', execs: 218, success: 100, lastSeen: '3h', status: 'healthy' },
  { id: 'tnt_6d2c11', name: 'Boteco do Zé', plan: 'Scale', execs: 12880, success: 99.7, lastSeen: '40s', status: 'healthy' },
  { id: 'tnt_1e8aa9', name: 'Sapataria Veneza', plan: 'Growth', execs: 0, success: 0, lastSeen: '6d', status: 'offline' },
  { id: 'tnt_3a55f0', name: 'Mundo das Festas', plan: 'Scale', execs: 9412, success: 88.4, lastSeen: '7 min', status: 'err' },
  { id: 'tnt_7b22c4', name: 'Verde Mate Ervas', plan: 'Starter', execs: 412, success: 97.6, lastSeen: '32 min', status: 'healthy' },
];

// Build logs
function makeLogs(n = 80) {
  const out = [];
  const statuses = ['success', 'success', 'success', 'success', 'success', 'success', 'error', 'success', 'warn'];
  const errs = [
    'Timeout: ActiveCampaign API didn\'t respond in 8s',
    'Invalid token: Nuvemshop returned 401',
    'Validation: missing email field on contact payload',
    'Rate limited by ActiveCampaign (429)',
  ];
  const now = new Date('2026-04-19T15:42:00');
  for (let i = 0; i < n; i++) {
    const fn = FUNCTIONS[i % FUNCTIONS.length];
    const t = TENANTS[i % TENANTS.length];
    const status = statuses[i % statuses.length];
    const ts = new Date(now);
    ts.setMinutes(ts.getMinutes() - i * 7 - Math.floor(Math.random() * 3));
    out.push({
      id: 'exec_' + (1000000 + i).toString(36),
      tenant_id: t.id,
      tenant_name: t.name,
      function_name: fn,
      status,
      duration_ms: 80 + Math.floor(Math.random() * 1800),
      credits_used: status === 'error' ? 0 : 1,
      created_at: ts.toISOString(),
      time_label: ts.toLocaleTimeString('pt-BR', { hour: '2-digit', minute: '2-digit', second: '2-digit' }),
      date_label: ts.toLocaleDateString('pt-BR', { day: '2-digit', month: 'short' }),
      error_message: status === 'error' ? errs[i % errs.length] : null,
      payload_in: status === 'error' ? null : {
        topic: fn === 'fn-webhook-router' ? 'order/paid' : null,
        order_id: 7821400 + i,
        customer: { email: 'cliente' + i + '@email.com', name: 'Cliente ' + i },
        total: (Math.random() * 500 + 50).toFixed(2),
      },
      payload_out: status === 'error' ? null : {
        ac_contact_id: 80000 + i,
        tags_added: ['comprou-pago', 'loja-' + t.id.slice(-4)],
        automation_triggered: 'pos-compra-fluxo-1',
      },
    });
  }
  return out;
}

const LOGS = makeLogs(80);

const PLANS = [
  { id: 'starter', name: 'Starter', price: 49, max_stores: 1, monthly_executions: 1000, features: ['1 loja Nuvemshop', '1.000 execuções/mês', 'Logs 7 dias', 'Suporte por e-mail'], current: false },
  { id: 'growth', name: 'Growth', price: 149, max_stores: 1, monthly_executions: 5000, features: ['1 loja Nuvemshop', '5.000 execuções/mês', 'Logs 15 dias', 'Carrinhos abandonados', 'Suporte prioritário'], current: true, popular: true },
  { id: 'scale', name: 'Scale', price: 349, max_stores: 3, monthly_executions: 20000, features: ['Até 3 lojas', '20.000 execuções/mês', 'Logs 30 dias', 'Webhooks customizados', 'SLA 99,9%', 'Onboarding dedicado'], current: false },
];

const SYNC_JOBS = [
  { id: 'job_a1', type: 'orders', label: 'Histórico de pedidos', desc: 'Importa todos os pedidos da loja para o ActiveCampaign como contatos com tags de produto.', icon: 'lucide:receipt', last_run: 'há 2 dias', last_result: '1.248 pedidos', est: '~5 min', cost: 12 },
  { id: 'job_b2', type: 'catalog', label: 'Catálogo de produtos', desc: 'Sincroniza produtos, variantes e estoque com o catálogo de Deep Data do AC.', icon: 'lucide:package', last_run: 'há 6h', last_result: '892 produtos', est: '~2 min', cost: 4 },
  { id: 'job_c3', type: 'leads', label: 'Novos leads', desc: 'Compara base AC ↔ Nuvemshop e cria contatos novos com cupom personalizado.', icon: 'lucide:user-plus', last_run: 'há 14h', last_result: '23 leads', est: '~1 min', cost: 2 },
];

Object.assign(window, {
  TENANT, KPIS, CHART_14D, FUNCTIONS, TENANTS, LOGS, PLANS, SYNC_JOBS,
});
