// VeloraTech — Shared Supabase client + utilities for all customer-facing pages
// Loaded by: index.html, book.html, consult.html
// Requires: @supabase/supabase-js CDN already loaded (window.supabase)
// Exposes:
//   window.vtGenerateRefId(type) → 'VT-BOOK-XXXX' or 'VT-CON-XXXX'
//   window.vtNextJobId()         → resolves to next available 'JOB-xxx' string
//   window.vtInsertJob(row)      → inserts into jobs table, throws on error
//   window.vtSendEmail(payload)  → calls Netlify function to send email via Resend

(function () {
  const _VT_URL  = 'https://yfbfsbictixbrbutcdsr.supabase.co';
  const _VT_ANON = 'sb_publishable_yRdtMaxffp-9NBIaAqewxA_urP3ds7c';

  const _vtSB = window.supabase
    ? window.supabase.createClient(_VT_URL, _VT_ANON)
    : null;

  if (!_vtSB) {
    console.warn('[VeloraTech] Supabase SDK not loaded — form submissions will fall back to email only.');
  }

  // ── Generate a reference ID ──────────────────────────────────────────────
  // type: 'BOOK' → VT-BOOK-XXXX
  // type: 'CON'  → VT-CON-XXXX
  function vtGenerateRefId(type) {
    const num = String(Math.floor(Math.random() * 9000) + 1000);
    return 'VT-' + type + '-' + num;
  }

  // ── Next available JOB-xxx ID ─────────────────────────────────────────────
  async function vtNextJobId() {
    if (!_vtSB) return 'JOB-T' + Date.now().toString(36).toUpperCase();
    try {
      const { data } = await _vtSB.from('jobs').select('id');
      const nums = (data || [])
        .map(r => parseInt((r.id || '').replace('JOB-', ''), 10))
        .filter(n => !isNaN(n));
      const next = nums.length ? Math.max(...nums) + 1 : 1;
      return 'JOB-' + String(next).padStart(3, '0');
    } catch (_) {
      return 'JOB-T' + Date.now().toString(36).toUpperCase();
    }
  }

  // ── Insert a jobs row ────────────────────────────────────────────────────
  // Tries to insert with all supplied fields first. If the DB is missing the
  // newer columns (migration not yet run) it silently retries with only the
  // original base columns so booking always succeeds.
  const _BASE_JOB_COLS = [
    'id','reference_id','customer','phone','email','service',
    'address','lat','lng','date','time','status',
    'assigned_to','deposit_paid','notes','amount','created',
  ];
  async function vtInsertJob(row) {
    if (!_vtSB) throw new Error('Supabase not loaded — cannot save booking.');
    const { error } = await _vtSB.from('jobs').insert(row);
    if (error) {
      // If the error is about an unknown column (migration pending), retry with base cols only
      if (error.code === '42703' || (error.message || '').toLowerCase().includes('column')) {
        console.warn('[VT] vtInsertJob: unknown column — retrying with base schema', error.message);
        const baseRow = {};
        _BASE_JOB_COLS.forEach(k => { if (row[k] !== undefined) baseRow[k] = row[k]; });
        const { error: e2 } = await _vtSB.from('jobs').insert(baseRow);
        if (e2) throw new Error(e2.message);
        return; // saved successfully with base columns
      }
      throw new Error(error.message);
    }
  }

  // ── Update a jobs row by reference_id ───────────────────────────────────────
  async function vtUpdateJob(referenceId, patch) {
    if (!_vtSB) return;
    const { error } = await _vtSB.from('jobs').update(patch).eq('reference_id', referenceId);
    if (error) console.warn('[VT] vtUpdateJob error:', error.message);
  }

  // ── Send email via Netlify function ───────────────────────────────────────
  // payload: { type: 'booking'|'consult'|'invoice', ...fields }
  // Non-blocking: caller should .catch() any errors
  async function vtSendEmail(payload) {
    const res = await fetch('/.netlify/functions/send-email', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify(payload),
    });
    if (!res.ok) {
      const body = await res.text();
      throw new Error('Email function returned ' + res.status + ': ' + body);
    }
    return res.json();
  }

  window.vtGenerateRefId = vtGenerateRefId;
  window.vtNextJobId     = vtNextJobId;
  window.vtInsertJob     = vtInsertJob;
  window.vtUpdateJob     = vtUpdateJob;
  window.vtSendEmail     = vtSendEmail;
})();
