// data.jsx — единый источник правды по событиям + помощники.
// Загружается ПЕРВЫМ (после icons.jsx). Кладёт всё в window.
const FL_EVENTS = [
  { id:"e1",  cat:"culture",  sub:"Концерт / живая музыка", title:"Концерт на крыше Эгершельда",   do:0, time:"21:00", place:"Эгершельд",        author:"Кирилл", rate:4.8, ver:true,  going:14, cap:40, live:true, paid:true, price:800, added:4,   img:"1516450360452-9312f5e86fc7" },
  { id:"e2",  cat:"nature",   sub:"Море / пляж / купание",  title:"Друзья на закате у моря",        do:0, time:"19:30", place:"Маяк",             author:"Лера",   rate:5.0, ver:true,  going:3,  cap:6,  live:true, added:9,   img:"1511632765486-a01980e01a18" },
  { id:"e3",  cat:"social",   sub:"Квартирник",             title:"Квартирник на Эгершельде",       do:0, time:"20:00", place:"Эгершельд",        author:"Аня",    rate:4.9, ver:true,  going:5,  cap:8,  live:true, added:22,  img:"1517457373958-b7bdd4587205" },
  { id:"e4",  cat:"games",    sub:"Настолки / Мафия / DnD", title:"Настолки и новые знакомства",     do:0, time:"19:00", place:"Анти-кафе",        author:"Соня",   rate:4.9, ver:true,  going:6,  cap:12, added:40,  img:"1543007630-9710e4a00a20" },
  { id:"e5",  cat:"city",     sub:"Фотопрогулка",           title:"Прогулка по Миллионке с плёнкой", do:0, time:"18:00", place:"Центр",            author:"Лера",   rate:5.0, ver:true,  going:4,  cap:6,  added:75,  img:"1488646953014-85cb44e25828" },
  { id:"e6",  cat:"social",   sub:"Готовим / ужин вместе",  title:"Ужин с новыми людьми",            do:1, time:"20:00", place:"Ресторан «Гудзон»",author:"Марк",   rate:4.7, ver:true,  going:4,  cap:8,  paid:true, price:1200, added:120, img:"1414235077428-338989a2e8c0" },
  { id:"e7",  cat:"nature",   sub:"Поход",                  title:"Рассвет на Токаревском маяке",    do:1, time:"05:30", place:"Маяк",             author:"Дима",   rate:4.8, ver:true,  going:5,  cap:10, added:150, img:"1506744038136-46273834b3fb" },
  { id:"e8",  cat:"culture",  sub:"Кино / киновечер",       title:"Ищу компанию в кино вечером",     do:1, time:"19:30", place:"Океан",            author:"Марк",   rate:4.6, ver:true,  going:1,  cap:3,  added:200, img:"1485846234645-a62644f84728" },
  { id:"e9",  cat:"business", sub:"Бизнес-завтрак",         title:"Бизнес-завтрак и нетворкинг",     do:2, time:"09:00", place:"Кофейня «Пять»",   author:"Настя",  rate:4.9, ver:true,  going:8,  cap:20, paid:true, price:400, added:240, img:"1523580494863-6f3031224c94" },
  { id:"e10", cat:"city",     sub:"Прогулка по городу",     title:"Вечерний город пешком",           do:2, time:"19:00", place:"Центр",            author:"Олег",   rate:4.7, ver:false, going:3,  cap:10, added:300, img:"1449824913935-59a10b8d2000" },
  { id:"e11", cat:"social",   sub:"Праздник",               title:"Вечер на ярмарке",                do:3, time:"18:00", place:"Набережная",       author:"Аня",    rate:4.8, ver:true,  going:11, cap:30, added:360, img:"1502136969935-8d8eef54d77b" },
  { id:"e12", cat:"trips",    sub:"Совместная поездка",     title:"Попутка на Шамору в субботу",     do:4, time:"10:00", place:"от Луговой",       author:"Олег",   rate:4.7, ver:false, going:2,  cap:4,  added:420, img:"1501785888041-af3ef285b470" },
  { id:"e13", cat:"social",   sub:"Вечеринка",              title:"Вписка у моря на Русском",        do:4, time:"22:00", place:"о. Русский",       author:"Кирилл", rate:4.8, ver:true,  going:9,  cap:20, added:480, img:"1530541930197-ff16ac917b0e" },
  { id:"e14", cat:"social",   sub:"Вечеринка",              title:"Шумная вписка в центре",          do:5, time:"23:00", place:"Центр",            author:"Соня",   rate:4.6, ver:true,  going:18, cap:35, paid:true, price:500, added:540, img:"1492684223066-81342ee5ff30" },
  { id:"e15", cat:"nature",   sub:"Поход",                  title:"Восхождение на Пидан",            do:5, time:"07:00", place:"Ливадийский хр.",  author:"Настя",  rate:5.0, ver:true,  going:7,  cap:12, added:600, img:"1551632811-561732d1e306" },
  { id:"e16", cat:"nature",   sub:"Поход",                  title:"Туман на сопках",                 do:6, time:"08:00", place:"Орлиное гнездо",   author:"Дима",   rate:4.8, ver:true,  going:4,  cap:10, added:700, img:"1470770841072-f978cf4d019e" },
];
const FL_HERO_IMG = "1511632765486-a01980e01a18";
const FL_ME_AVATAR = "1500648767791-00dcc994a43e";
// захардкоженные аватарки по полу (для тех, кто не загрузил своё фото)
const FL_AVATARS_M = ["1500648767791-00dcc994a43e","1507003211169-0a1dd7228f2d","1488161628813-04466f872be2","1506794778202-cad84cf45f1d","1513732822839-24f03a92f633","1530268729831-4b0b9e170218"];
const FL_AVATARS_F = ["1494790108377-be9c29b29330","1517841905240-472988babdf9","1438761681033-6461ffad8d80","1534528741775-53994a69daeb","1463453091185-61582044d556","1521119989659-a83eee488004"];
const FL_defaultAvatar = (gender, seed = 0) => { const arr = gender === "f" ? FL_AVATARS_F : FL_AVATARS_M; return arr[Math.abs(seed) % arr.length]; };
const FL_imgUrl = (id, w = 720, h = 720) => {
  const value = String(id || "");
  if (/^(https?:|data:|blob:|\/)/i.test(value)) return value;
  return `https://images.unsplash.com/photo-${value}?w=${w}&h=${h}&fit=crop&auto=format&q=70`;
};
const FL_AV_HUES = { Аня:18, Дима:150, Лера:210, Соня:335, Олег:265, Марк:45, Кирилл:18, Настя:150, Ты:210, Влад:265, Катя:335, Рома:200, Ника:45 };

// длинные описания для карточки события
const FL_DESC = {
  e1:"Живая музыка на закате, вид на бухту и Золотой мост. Местные группы, лёгкие напитки, тёплая ламповая атмосфера. Приходи один или с друзьями — все свои.",
  e3:"Уютный квартирник у Ани: гитара, пара бутылок вина, новые лица. Нас будет небольшая компания, человек 8. Можно со своим инструментом.",
  e7:"Встречаем рассвет на Токаревском маяке. Сбор затемно, идём по косе. Возьми тёплую куртку и термос — виды того стоят.",
  e2:"Собираемся небольшой компанией встретить закат у воды. Плед, разговоры, музыка. Идеально, чтобы познакомиться с новыми людьми в спокойной обстановке.",
  e4:"Большой вечер настолок в уютном анти-кафе в центре Владивостока! Собираемся компанией от новичков до опытных игроков — будут и лёгкие пати-games для разогрева, и серьёзные стратегии на весь вечер. В коллекции больше 50 игр: «Мафия», «Codenames», «Каркассон», «Манчкин», DnD-ваншот для желающих. Чай, кофе и печеньки included. Приходи один или с друзьями — мы рассадим так, чтобы все перезнакомились и нашли свою компанию. Атмосфера тёплая и ламповая, никакого токсичного соревнования — играем в удовольствие. Если у тебя есть любимая игра — бери с собой, с радостью научимся! Начинаем в 19:00, но можно подтянуться позже. Точный адрес и чат вечера откроются после подтверждения заявки.",
};

const FL_TODAY = (() => { const d = new Date(); d.setHours(0,0,0,0); return d; })();
const FL_DAY_MS = 86400000;
const FL_WD = ["Вс","Пн","Вт","Ср","Чт","Пт","Сб"];
const FL_WD_FULL = ["воскресенье","понедельник","вторник","среда","четверг","пятница","суббота"];
const FL_MON = ["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"];
const FL_MONTHS = ["Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"];
const FL_dateOf = (off) => new Date(FL_TODAY.getTime() + off * FL_DAY_MS);
const FL_offsetOf = (d) => Math.round((new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime() - FL_TODAY.getTime()) / FL_DAY_MS);
const FL_dayLabel = (off) => off === 0 ? "Сегодня" : off === 1 ? "Завтра" : FL_WD[FL_dateOf(off).getDay()];
const FL_fullDate = (off) => { const d = FL_dateOf(off); return `${d.getDate()} ${FL_MON[d.getMonth()]}`; };
const FL_longDate = (off) => { const d = FL_dateOf(off); const p = off===0?"Сегодня, ":off===1?"Завтра, ":""; return `${p}${d.getDate()} ${FL_MON[d.getMonth()]}, ${FL_WD_FULL[d.getDay()]}`; };
const FL_eventById = (id) => FL_EVENTS.find(e => e.id === id);

// несколько фото на событие (организатор добавил) — id → массив фото
const FL_GALLERY = {
  e1:  ["1516450360452-9312f5e86fc7","1492684223066-81342ee5ff30","1517457373958-b7bdd4587205","1530541930197-ff16ac917b0e","1470229722913-7c0e2dbbafd3","1429962714451-bb934ecdc4ec","1493676304819-0d7a8d026dcf","1501281668745-f7f57925c3b4","1459749411175-04bf5292ceea","1506157786151-b8491531f063","1533174072545-7a4b6ad7a6c3","1524368535928-5b5e00ddc76b","1540039155733-5bb30b53aa14","1516450360452-9312f5e86fc7"],
  e2:  ["1511632765486-a01980e01a18","1530541930197-ff16ac917b0e","1502230831726-fe5549140034"],
  e3:  ["1517457373958-b7bdd4587205","1516450360452-9312f5e86fc7","1492684223066-81342ee5ff30"],
  e5:  ["1488646953014-85cb44e25828","1449824913935-59a10b8d2000"],
  e7:  ["1506744038136-46273834b3fb","1470770841072-f978cf4d019e","1469474968028-56623f02e42e","1454942901704-3c44c11b2ad1"],
  e15: ["1551632811-561732d1e306","1470770841072-f978cf4d019e","1469474968028-56623f02e42e"],
};
const FL_galleryOf = (ev) => (ev && FL_GALLERY[ev.id] && FL_GALLERY[ev.id].length ? FL_GALLERY[ev.id] : (ev ? [ev.img] : []));
const FL_descOf = (ev) => (ev && FL_DESC[ev.id]) || "Спонтанная встреча для своих. Приходи познакомиться, провести время в хорошей компании и попробовать что-то новое. Подробности — в чате после подтверждения заявки.";

// дефолтная обложка на КАТЕГОРИЮ (запасной вариант)
const FL_CATCOVER = {
  social:"1530103862676-de8c9debad1d", city:"1634887042266-3651a54b9a69", nature:"1597417737417-04374cbed7cc",
  sport:"1461896836934-ffe607ba8211", games:"1632501641765-e568d28b0015", culture:"1516450360452-9312f5e86fc7",
  study:"1497633762265-9d179a990aa6", business:"1600880292203-757bb62b4baf", trips:"1500530855697-b586d89ba3ee",
  travel:"1488085061387-422e29b40080", sea:"1705751566378-5ffe550bdf79", content:"1452587925148-ce544e77e70d",
  hobby:"1469474968028-56623f02e42e", misc:"1511632765486-a01980e01a18",
};
// дефолтная обложка на ПОДКАТЕГОРИЮ (своя для каждой; тематика Владивосток/Приморье)
// TODO: заменить на реальные локальные снимки — сейчас подобранные плейсхолдеры.
const FL_SUBCOVER = {
  // Тусовки и общение
  "Вечеринка":"1492684223066-81342ee5ff30", "Клубы":"1566737236500-c8ac43014a67", "Танцы":"1545128485-c400e7702796", "Квартирник":"1517457373958-b7bdd4587205",
  "Кофе / поболтать":"1414235077428-338989a2e8c0", "Бар-хоп / посидеть":"1530541930197-ff16ac917b0e",
  "Готовим / ужин вместе":"1543007630-9710e4a00a20", "Пикник":"1469474968028-56623f02e42e",
  "День рождения":"1530103862676-de8c9debad1d", "Праздник":"1502136969935-8d8eef54d77b",
  // Город и прогулки
  "Прогулка по городу":"1587637885131-8b08567433d6", "Фотопрогулка":"1721311941436-cc29a14bc303",
  "Новые места / мини-экскурсия":"1699320166434-451ac68efa3c",
  // Природа и вылазки
  "Поход":"1551632811-561732d1e306", "Хайкинг":"1454942901704-3c44c11b2ad1", "Встречаем рассвет":"1506744038136-46273834b3fb", "Прогулка на природе":"1441974231531-c6227db76b6e", "База отдыха":"1469474968028-56623f02e42e", "Шашлыки / барбекю":"1555939594-58d7cb561ad1", "Водопады":"1470770841072-f978cf4d019e",
  "Море / пляж / купание":"1511632765486-a01980e01a18", "Кемпинг с палатками":"1496588152823-86ff7695e68f",
  "Рыбалка":"1444723121867-7a241cacace9", "Охота":"1518609878373-06d740f60d8b",
  "Острова":"1513635269975-59663e0ac1ad", "Поездка за город":"1519681393784-d120267933ba",
  // Спорт и активности
  "Спорт (футбол / волейбол / баскет и др.)":"1461896836934-ffe607ba8211", "Активные игры на воздухе":"1530549387789-4c1017266635",
  "Пробежка / вело / ролики":"1476480862126-209bfaa8edc8", "Йога / зарядка":"1518611012118-696072aa579a",
  "Зима (коньки / лыжи / сноуборд)":"1551698618-1dfe5d97d256", "Бани / сауны":"1571902943202-507ec2618e8f",
  // Игры и развлечения
  "Настолки / Мафия / DnD":"1543007630-9710e4a00a20", "Видеоигры / киберспорт":"1542751371-adc38448a05e",
  "Квиз":"1517457373958-b7bdd4587205", "Квест-рум":"1530541930197-ff16ac917b0e",
  // Культура и творчество
  "Концерт / живая музыка":"1516450360452-9312f5e86fc7", "Кино / киновечер":"1485846234645-a62644f84728",
  "Выставка / музей / театр":"1480714378408-67cf0d13bc1b", "Творческая мастерская / мастер-класс":"1452860606245-08befc0ff44b",
  // Учёба и развитие
  "Языковой разговорный клуб":"1523580494863-6f3031224c94", "Книжный клуб":"1481627834876-b7833e8f5570",
  "Коворкинг / учимся вместе":"1505373877841-8d25f7d46678",
  // Бизнес и нетворкинг
  "Нетворкинг-встреча":"1505373877841-8d25f7d46678", "Мастермайнд":"1542744173-8e7e53415bb0",
  "Брейншторм":"1531403009284-440f080d1e12", "Бизнес-завтрак":"1414235077428-338989a2e8c0",
  "Митап / доклады":"1540575467063-178a50c2df87", "Питч / разбор проектов":"1556761175-5973dc0f32e7",
  // Поездки и попутки
  "Совместная поездка":"1501785888041-af3ef285b470",
  // Путешествие
  "По России":"1513635269975-59663e0ac1ad", "По Приморью":"1540388482879-c02f7127c83f", "За границу":"1488646953014-85cb44e25828",
  // Море
  "Снорклинг":"1505816014357-96b5ff457e9a", "Фридайвинг":"1530053969600-caed2596d242", "Яхтинг":"1544551763-46a013bb70d5", "Катер":"1502933691298-84fc14542831", "Sup-прогулка":"1530053969600-caed2596d242",
  // Польза и хобби
  "Волонтёрство / эко-субботник":"1469474968028-56623f02e42e", "Выгул собак / питомцы":"1450778869180-41d0601e046e",
  // Разное
  "Ищу компанию":"1511632765486-a01980e01a18",
};
const FL_coverOf = (catId, sub) => (sub && FL_SUBCOVER[sub]) || FL_CATCOVER[catId] || FL_HERO_IMG;

// Галерея обложек для события — нейтральные и локальные (Приморье). Без зарубежных городов.
const FL_COVER_GALLERY = [
  { group:"Владивосток", ids:["1634887042266-3651a54b9a69","1587637885131-8b08567433d6","1699320166434-451ac68efa3c","1721311941436-cc29a14bc303","1705751566378-5ffe550bdf79"] },
  { group:"Море и побережье Приморья", ids:["1540388482879-c02f7127c83f","1597417737417-04374cbed7cc","1502933691298-84fc14542831","1505816014357-96b5ff457e9a","1444723121867-7a241cacace9"] },
  { group:"Лес и сопки", ids:["1551632811-561732d1e306","1506744038136-46273834b3fb","1441974231531-c6227db76b6e","1470770841072-f978cf4d019e","1454942901704-3c44c11b2ad1"] },
  { group:"Компания и в помещении", ids:["1530103862676-de8c9debad1d","1414235077428-338989a2e8c0","1517457373958-b7bdd4587205","1530541930197-ff16ac917b0e","1543007630-9710e4a00a20"] },
  { group:"Активный отдых", ids:["1530549387789-4c1017266635","1461896836934-ffe607ba8211","1469474968028-56623f02e42e","1518611012118-696072aa579a"] },
];
const FL_COVER_IDS = FL_COVER_GALLERY.flatMap(g => g.ids);

// друзья (единый источник — используется и в профиле, и в модалке «Друзья»)
const FL_FRIENDS = [
  { name:"Аня Морозова",        rate:4.9, ver:true,  mutual:12, u:"anya", av:"1494790108377-be9c29b29330" },
  { name:"Дмитрий Ковалёв",     rate:4.8, ver:true,  mutual:8,  av:"1507003211169-0a1dd7228f2d" },
  { name:"Лера",                rate:5.0, ver:true,  mutual:15, av:"1517841905240-472988babdf9" },
  { name:"Олег Пономаренко",    rate:4.7, ver:false, mutual:3,  av:"1500648767791-00dcc994a43e" },
  { name:"Соня",                rate:4.9, ver:true,  mutual:9,  av:"1438761681033-6461ffad8d80" },
  { name:"Марк Вайнштейн",      rate:4.6, ver:true,  mutual:5,  av:"1506794778202-cad84cf45f1d" },
  { name:"Катя Соловьёва",      rate:4.8, ver:true,  mutual:7,  av:"1534528741775-53994a69daeb" },
  { name:"Илья",                rate:4.7, ver:false, mutual:4,  av:"1488161628813-04466f872be2" },
  { name:"Виктория Александрова",rate:5.0,ver:true,  mutual:11, av:"1463453091185-61582044d556" },
  { name:"Паша",                rate:4.5, ver:true,  mutual:2,  av:"1502685104226-ee32379fefbe" },
  { name:"Юлия Краснова",       rate:4.9, ver:true,  mutual:14, av:"1521119989659-a83eee488004" },
  { name:"Артём Гончаров",      rate:4.8, ver:false, mutual:6,  av:"1513732822839-24f03a92f633" },
  { name:"Лиза",                rate:5.0, ver:true,  mutual:10, av:"1545996124-0501ebae84d0" },
  { name:"Константин Журавлёв", rate:4.6, ver:true,  mutual:3,  av:"1487412720507-e7ab37603c6f" },
  { name:"Маша Ким",            rate:4.9, ver:true,  mutual:8,  av:"1499952127939-9bbf5af6c51c" },
  { name:"Денис",               rate:4.7, ver:false, mutual:5,  av:"1554151228-14d9def656e4" },
  { name:"Ольга Тимофеева",     rate:5.0, ver:true,  mutual:13, av:"1502685104226-ee32379fefbe" },
  { name:"Саша",                rate:4.8, ver:true,  mutual:4,  av:"1530268729831-4b0b9e170218" },
  { name:"Максим Подгорный",    rate:4.7, ver:true,  mutual:6,  av:"1507003211169-0a1dd7228f2d" },
  { name:"Настя Бур",           rate:4.9, ver:true,  mutual:9,  av:"1539571696357-5a69c17a67c6" },
  { name:"Григорий Самойленко", rate:4.6, ver:false, mutual:2,  av:"1488161628813-04466f872be2" },
  { name:"Вера",                rate:5.0, ver:true,  mutual:12, av:"1463453091185-61582044d556" },
];

Object.assign(window, {
  FL_EVENTS, FL_HERO_IMG, FL_ME_AVATAR, FL_AVATARS_M, FL_AVATARS_F, FL_defaultAvatar, FL_imgUrl, FL_AV_HUES, FL_DESC,
  FL_TODAY, FL_WD, FL_MON, FL_MONTHS, FL_dateOf, FL_offsetOf, FL_dayLabel, FL_fullDate, FL_longDate, FL_eventById,
  FL_GALLERY, FL_galleryOf, FL_descOf, FL_CATCOVER, FL_SUBCOVER, FL_coverOf, FL_COVER_GALLERY, FL_COVER_IDS, FL_FRIENDS,
});
