// Sample wedding data — Sloane & Theo, October 4, 2026

const WEDDING = {
  brides: 'Sloane',
  groom:  'Theo',
  date:   new Date('2026-10-04T16:00:00'),
  city:   'Mendocino, California',
  daysUntil: 142,
  guestCount: 120,
  budget: 60000,
};

const BUDGET = {
  total: 60000,
  spent: 42800,
  remaining: 17200,
  paidToDate: 31200,
  categories: [
    { name: 'Venue',         spent: 14000, planned: 14000, status: 'paid',    icon: 'home' },
    { name: 'Catering',      spent: 11200, planned: 12000, status: 'partial', icon: 'cake' },
    { name: 'Photography',   spent:  5400, planned:  5400, status: 'paid',    icon: 'camera' },
    { name: 'Florals',       spent:  4720, planned:  4000, status: 'over',    icon: 'leaf',   note: '18% over plan' },
    { name: 'Music & DJ',    spent:  2800, planned:  3000, status: 'partial', icon: 'music' },
    { name: 'Attire',        spent:  2400, planned:  3500, status: 'partial', icon: 'sparkle' },
    { name: 'Stationery',    spent:  1280, planned:  1500, status: 'paid',    icon: 'flag' },
    { name: 'Rings',         spent:  1000, planned:  3000, status: 'partial', icon: 'rings' },
    { name: 'Transportation', spent:    0, planned:  1500, status: 'open',    icon: 'arrow' },
    { name: 'Honeymoon',     spent:     0, planned:  8000, status: 'open',    icon: 'heart' },
    { name: 'Misc & Gifts',  spent:     0, planned:  4100, status: 'open',    icon: 'sparkle' },
  ],
  contributors: [
    { name: 'Sloane & Theo',     amount: 32000, color: '#a87a4f' },
    { name: "Sloane's parents",  amount: 18000, color: '#8a9a85' },
    { name: "Theo's parents",    amount: 10000, color: '#c79b91' },
  ],
};

const RSVP = {
  total: 120,
  attending: 76,
  declined: 8,
  pending: 36,
  households: 58,
  meals: {
    'Wild salmon':       28,
    'Roasted duck':      24,
    'Heirloom risotto':  18,
    'Children\u2019s plate': 6,
  },
  dietary: [
    { count: 4, label: 'Gluten-free' },
    { count: 3, label: 'Vegan' },
    { count: 2, label: 'Shellfish allergy' },
    { count: 1, label: 'Nut allergy' },
  ],
  alerts: 3,
  guests: [
    { name: 'Margaret & David Chen',   group: 'Family · Sloane', status: 'attending', meal: 'Wild salmon',     plus: false },
    { name: 'Amelia Park',             group: 'Bridesmaid',       status: 'attending', meal: 'Heirloom risotto', plus: true,  plusName: 'Owen Marsh' },
    { name: 'Jules Sato',              group: 'College',          status: 'pending',                            plus: true },
    { name: 'Henry & Beatrice Foss',   group: 'Family · Theo',    status: 'attending', meal: 'Roasted duck',    plus: false, note: 'Gluten-free' },
    { name: 'Priya Iyer',              group: 'Work · Sloane',    status: 'attending', meal: 'Heirloom risotto', plus: false, note: 'Vegan' },
    { name: 'Marcus Boyle',            group: 'College',          status: 'declined' },
    { name: 'Rosalind Whitaker',       group: 'Family · Theo',    status: 'attending', meal: 'Wild salmon',     plus: true,  plusName: 'Felix Whitaker' },
    { name: 'Theo\u2019s groomsmen (4)', group: 'Wedding party',  status: 'attending' },
  ],
};

const TASKS = [
  { id: 't1', title: 'Final payment to Marigold Florals',  due: 'Due Friday',        kind: 'payment',  amount: 1820, priority: 'high' },
  { id: 't2', title: 'Send "save the date" follow-ups',    due: '12 guests pending', kind: 'rsvp',     count: 12,    priority: 'high' },
  { id: 't3', title: 'Cake tasting at Lune Patisserie',    due: 'Thursday · 2:00 PM', kind: 'event',  priority: 'med' },
  { id: 't4', title: 'Confirm rehearsal dinner menu',      due: 'This week',         kind: 'todo',     priority: 'med' },
  { id: 't5', title: 'Second dress fitting',               due: 'Sep 18 · 11:00 AM', kind: 'event',    priority: 'low' },
];

const CALENDAR = {
  monthLabel: 'September 2026',
  monthIndex: 8, year: 2026,
  // Days with events (key = day-of-month)
  events: {
    3:  [{ title: 'Tasting · Lune Patisserie', time: '2:00 PM', kind: 'tasting' }],
    8:  [{ title: 'Florist final payment',     time: 'Due',     kind: 'payment' }],
    12: [{ title: 'RSVP reminder send',        time: 'Auto',    kind: 'rsvp' }],
    14: [{ title: 'Venue walkthrough',         time: '10:00 AM',kind: 'venue' }],
    18: [
      { title: 'Dress fitting · 2nd',          time: '11:00 AM',kind: 'attire' },
      { title: 'Cake decisions due',           time: 'EOD',     kind: 'tasting' },
    ],
    22: [{ title: 'Welcome dinner planning',   time: '6:30 PM', kind: 'event' }],
    26: [{ title: 'Hair & makeup trial',       time: '9:00 AM', kind: 'attire' }],
    30: [{ title: 'RSVP cutoff',               time: 'EOD',     kind: 'rsvp' }],
  },
  upcoming: [
    { day: 'Thu',  date: 'Sep 3',  title: 'Tasting at Lune Patisserie',    time: '2:00 PM', kind: 'tasting' },
    { day: 'Tue',  date: 'Sep 8',  title: 'Florist final payment',         time: 'Due',     kind: 'payment' },
    { day: 'Mon',  date: 'Sep 14', title: 'Venue walkthrough',             time: '10:00 AM',kind: 'venue' },
    { day: 'Fri',  date: 'Sep 18', title: 'Second dress fitting',          time: '11:00 AM',kind: 'attire' },
  ],
};

const KIND_COLORS = {
  payment: '#a87a4f',
  rsvp:    '#8a9a85',
  tasting: '#c79b91',
  venue:   '#7d6a52',
  attire:  '#9a7da0',
  event:   '#6f8a6a',
};

// Seating: 11 tables (head + 10 guest tables). Seats may be filled w/ a guest
// or null (empty). Names are short on purpose so they render on the disc.
const SEATING = {
  unassigned: 14,
  conflicts: 1,
  tables: [
    { id: 1, name: 'The Head Table', kind: 'head',     capacity: 8,
      seats: ['Sloane','Theo','Amelia','Owen','Marcus','Priya','Jules','Iris'] },
    { id: 2, name: 'Parents & Honor', kind: 'family',  capacity: 8,
      seats: ['Margaret','David','Henry','Beatrice','Rose','Anne','Paul','Eli'] },
    { id: 3, name: 'Sloane · Family',  kind: 'family', capacity: 8,
      seats: ['Cousin J','Cousin M','Aunt R','Uncle L','Liam','Nora',null,null] },
    { id: 4, name: 'Theo · Family',    kind: 'family', capacity: 8,
      seats: ['Rosalind','Felix','Hugh','Diana','Ben','Mia','Toby','Lara'] },
    { id: 5, name: 'College',          kind: 'friends', capacity: 8,
      seats: ['Jamie','Sara','Tom','Maya','Pat','Wren','Quinn','Avery'] },
    { id: 6, name: 'High school',      kind: 'friends', capacity: 8,
      seats: ['Mark','Lana','Beck','Iris',null,null,null,null] },
    { id: 7, name: 'Work · Sloane',    kind: 'work',    capacity: 8,
      seats: ['Priya','Sam','Lee','Kim','Drew','Theo C.','Reese',null] },
    { id: 8, name: 'Work · Theo',      kind: 'work',    capacity: 8,
      seats: ['Otto','Mae','Nico','Gus','Lou','Rae',null,null] },
    { id: 9, name: 'Neighbors',        kind: 'friends', capacity: 6,
      seats: ['June','Pete','Ada','Roy','Lila','Cole'] },
    { id: 10, name: 'Childhood',       kind: 'friends', capacity: 6,
      seats: ['Mae','Ivy','Theo D.','Sage',null,null] },
    { id: 11, name: 'Plus ones',       kind: 'friends', capacity: 6,
      seats: ['Owen M.','Felix W.','Otto P.',null,null,null] },
  ],
  unassignedList: [
    { name: 'Jules Sato',     note: 'Pending RSVP' },
    { name: 'Marcus Boyle',   note: 'Declined' },
    { name: 'Aunt Patricia',  note: 'No dietary' },
    { name: 'Cousin Theo S.', note: 'Late add' },
  ],
};

const VENDORS = {
  booked: 7, researching: 2, paid: 4,
  list: [
    { name: 'Hollow Tree Venue',  role: 'Venue',        status: 'paid',       contact: 'Lia Marsh',     paid: 14000, total: 14000, next: null },
    { name: 'Marigold Florals',   role: 'Florist',      status: 'due',        contact: 'June Aoki',     paid: 2900, total: 4720, next: 'Final $1,820 · Fri' },
    { name: 'Lune Patisserie',    role: 'Cake',         status: 'booked',     contact: 'Henri Bouchet', paid: 700, total: 1400, next: 'Tasting Thu 2pm' },
    { name: 'Hart Photography',   role: 'Photographer', status: 'paid',       contact: 'Noa Hart',      paid: 5400, total: 5400, next: 'Engagement shoot Sep 26' },
    { name: 'Forest & Vine',      role: 'Caterer',      status: 'booked',     contact: 'Carlos Reyes',  paid: 5600, total: 11200, next: 'Final tasting Sep 14' },
    { name: 'Salt Air DJ',        role: 'Music',        status: 'booked',     contact: 'Ren Park',      paid: 1400, total: 2800, next: 'Playlist due Oct 1' },
    { name: 'Atelier Cardinal',   role: 'Attire',       status: 'partial',    contact: 'Pia Cardinal',  paid: 1200, total: 2400, next: 'Fitting #2 Sep 18' },
    { name: 'Press & Vellum',     role: 'Stationery',   status: 'paid',       contact: 'Wren Foley',    paid: 1280, total: 1280, next: null },
    { name: 'Pacific Coast Cars', role: 'Transport',    status: 'researching',contact: '\u2014',        paid: 0, total: 0, next: 'Quote pending' },
    { name: 'Bloom & Veil',       role: 'Hair / Makeup',role: 'Hair & Makeup', status: 'researching', contact: '\u2014', paid: 0, total: 0, next: 'Trial Sep 26' },
  ],
};

const TABLE_KIND_COLORS = {
  head:    '#1d1812',
  family:  '#a87a4f',
  friends: '#8a9a85',
  work:    '#c79b91',
};

// Wedding party — the named people standing up with them.
const PARTY = {
  bridal: [
    { name: 'Amelia Park',     role: 'Maid of Honor', side: 'sloane' },
    { name: 'Iris Vance',      role: 'Bridesmaid',    side: 'sloane' },
    { name: 'Lana Boone',      role: 'Bridesmaid',    side: 'sloane' },
    { name: 'Beatrice Kim',    role: 'Bridesmaid',    side: 'sloane' },
  ],
  groom: [
    { name: 'Marcus Boyle',    role: 'Best Man',   side: 'theo' },
    { name: 'Felix Whitaker',  role: 'Groomsman',  side: 'theo' },
    { name: 'Owen Marsh',      role: 'Groomsman',  side: 'theo' },
    { name: 'Hugh Foss',       role: 'Groomsman',  side: 'theo' },
  ],
  family: [
    { name: 'Margaret Chen',   role: 'Mother of the Bride', side: 'sloane' },
    { name: 'David Chen',      role: 'Father of the Bride', side: 'sloane' },
    { name: 'Beatrice Foss',   role: 'Mother of the Groom', side: 'theo'   },
    { name: 'Henry Foss',      role: 'Father of the Groom', side: 'theo'   },
  ],
  officiant: { name: 'Father Joel',    role: 'Officiant'   },
  ringbearer:{ name: 'Toby Whitaker',  role: 'Ring Bearer', age: 5 },
  flowergirl:{ name: 'Mia Foss',       role: 'Flower Girl', age: 7 },
};

// Moodboard — palette, vibe, inspiration tiles.
const MOODBOARD = {
  vibe: 'Coastal · Candlelit · Romantic',
  story: 'Warm ivory & terracotta. Candle-driven, not flower-heavy. Coastal fog, long pine tables, bare-buttercream simplicity.',
  palette: [
    { name: 'Clay',     hex: '#a87a4f' },
    { name: 'Sage',     hex: '#8a9a85' },
    { name: 'Rose',     hex: '#c79b91' },
    { name: 'Ivory',    hex: '#f5efe2' },
    { name: 'Ink',      hex: '#1d1812' },
  ],
  inspiration: [
    { id: 'i1', kind: 'florals',  label: 'Ranunculus & dahlias', span: 'tall' },
    { id: 'i2', kind: 'venue',    label: 'Hollow Tree exterior'  },
    { id: 'i3', kind: 'table',    label: 'Long pine tablescape' },
    { id: 'i4', kind: 'lighting', label: 'Bistro string lights'  },
    { id: 'i5', kind: 'dress',    label: 'Silk slip + cape',     span: 'tall' },
    { id: 'i6', kind: 'cake',     label: 'Bare buttercream'      },
    { id: 'i7', kind: 'bouquet',  label: 'Wild grasses' },
    { id: 'i8', kind: 'suit',     label: 'Cream linen suit'      },
    { id: 'i9', kind: 'florals',  label: 'Candle clusters' },
  ],
};

Object.assign(window, {
  WEDDING, BUDGET, RSVP, TASKS, CALENDAR, KIND_COLORS,
  SEATING, VENDORS, TABLE_KIND_COLORS,
  PARTY, MOODBOARD,
});
