/* ===== Luxury Academy — Supabase API Client ===== */

const _sb = supabase.createClient(
  'https://beprqhaqnrixcpjxtwtt.supabase.co',
  'sb_publishable_nb3xRxwvYHFVFvfzcbrlKQ_mCNtw44G'
);

// Local image map — ensures photos appear even when data comes from Supabase
const _SVC_IMGS = {
  "extension-pestanas":   "assets/svc-lash-ext.jpg",
  "lifting-pestanas":     "assets/svc-lash-lift.jpg",
  "diseno-cejas":         "assets/svc-brows.jpg",
  "micropigmentacion-cejas":  "assets/svc-micropig-brows.jpg",
  "micropigmentacion-labios": "assets/svc-micropig-lips.jpg",
  "manicure-pedicure":    "assets/svc-nails.jpg",
  "facial-profesional":   "assets/svc-facial.jpg",
  "depilacion":           "assets/svc-waxing.jpg",
};
const _CRS_IMGS = {
  "curso-lashista":          "assets/crs-lashista.jpg",
  "curso-maquillaje":        "assets/crs-makeup.jpg",
  "curso-micropigmentacion": "assets/crs-micropig.jpg",
  "curso-unas":              "assets/crs-nails.jpg",
  "masterclass-cejas":       "assets/crs-cejas.jpg",
  "curso-estetica":          "assets/crs-estetica.jpg",
};

// ── Mappers: flat DB row → nested shape components expect ─────────────────────
function _mapService(r) {
  return {
    id: r.id,
    img: r.img || _SVC_IMGS[r.id] || null,
    cat: r.cat,
    name:     { es: r.name_es,     en: r.name_en     },
    desc:     { es: r.desc_es,     en: r.desc_en     },
    duration: { es: r.duration_es, en: r.duration_en },
    includes: { es: r.includes_es, en: r.includes_en },
    price: r.price,
    badge: r.badge_es ? { es: r.badge_es, en: r.badge_en } : null,
    swatchFrom: r.swatch_from,
    swatchTo:   r.swatch_to,
  };
}

function _mapCourse(r) {
  return {
    id:   r.id,
    img:  r.img || _CRS_IMGS[r.id] || null,
    icon: r.icon,
    name:     { es: r.name_es,     en: r.name_en     },
    desc:     { es: r.desc_es,     en: r.desc_en     },
    modules:  { es: r.modules_es,  en: r.modules_en  },
    duration: { es: r.duration_es, en: r.duration_en },
    level:    { es: r.level_es,    en: r.level_en    },
    price: r.price,
    featured: r.featured,
  };
}

function _mapTestimonial(r) {
  return {
    name: r.name, initials: r.initials, stars: r.stars,
    es: { body: r.body_es, svc: r.svc_es },
    en: { body: r.body_en, svc: r.svc_en },
  };
}

// ── Public API ────────────────────────────────────────────────────────────────
window.lxApi = {
  async getServices() {
    const { data, error } = await _sb.from('services').select('*').order('sort_order');
    if (error) throw error;
    return data.map(_mapService);
  },

  async getCourses() {
    const { data, error } = await _sb.from('courses').select('*').order('sort_order');
    if (error) throw error;
    return data.map(_mapCourse);
  },

  async getTestimonials() {
    const { data, error } = await _sb.from('testimonials').select('*').order('id');
    if (error) throw error;
    return data.map(_mapTestimonial);
  },

  // Returns array of taken time strings for a given "YYYY-MM-DD" date
  async getBookedSlots(dateStr) {
    const { data, error } = await _sb
      .from('booked_slots')
      .select('time_slot')
      .eq('date', dateStr);
    if (error) throw error;
    return data.map(r => r.time_slot);
  },

  async createBooking({ serviceId, date, timeSlot, name, phone, notes, lang }) {
    const { data, error } = await _sb
      .from('bookings')
      .insert({ service_id: serviceId, date, time_slot: timeSlot, name, phone, notes: notes || null, lang })
      .select('id')
      .single();
    if (error) throw error;
    return data;
  },

  // Silently ignores duplicate emails (already subscribed)
  async subscribe(email, lang) {
    const { error } = await _sb.from('newsletter_subscribers').insert({ email, lang });
    if (error && error.code !== '23505') throw error;
  },
};
