export type EmojiCategoryId = 'smileys' | 'gestures' | 'hearts' | 'animals' | 'food' | 'travel' | 'objects' | 'symbols';

export interface EmojiDefinition {
  id: string;
  category: EmojiCategoryId;
  keywords: string[];
  label: string;
}

export const EMOJI_CATEGORIES: Array<{ id: EmojiCategoryId; label: string; icon: string }> = [
  { id: 'smileys', label: 'Смайлы', icon: 'e-grinning' },
  { id: 'gestures', label: 'Жесты', icon: 'e-thumbs-up' },
  { id: 'hearts', label: 'Сердца', icon: 'e-red-heart' },
  { id: 'animals', label: 'Животные', icon: 'e-dog' },
  { id: 'food', label: 'Еда', icon: 'e-pizza' },
  { id: 'travel', label: 'Путешествия', icon: 'e-car' },
  { id: 'objects', label: 'Предметы', icon: 'e-bulb' },
  { id: 'symbols', label: 'Символы', icon: 'e-check' }
];

export const EMOJI_DEFINITIONS: EmojiDefinition[] = [
  { id: 'e-grinning', category: 'smileys', label: 'Улыбка', keywords: ['радость', 'смех', 'улыбка'] },
  { id: 'e-smile', category: 'smileys', label: 'Улыбка глаза', keywords: ['улыбка', 'радость'] },
  { id: 'e-laugh', category: 'smileys', label: 'Смех', keywords: ['смех', 'lol', 'ха'] },
  { id: 'e-rofl', category: 'smileys', label: 'Катаюсь', keywords: ['ржу', 'смех'] },
  { id: 'e-wink', category: 'smileys', label: 'Подмигивание', keywords: ['подмигнуть'] },
  { id: 'e-blush', category: 'smileys', label: 'Смущение', keywords: ['румянец', 'мило'] },
  { id: 'e-innocent', category: 'smileys', label: 'Невинность', keywords: ['ангел', 'невинный'] },
  { id: 'e-slight-smile', category: 'smileys', label: 'Лёгкая улыбка', keywords: ['улыбка'] },
  { id: 'e-thinking', category: 'smileys', label: 'Думаю', keywords: ['думаю', 'хм'] },
  { id: 'e-neutral', category: 'smileys', label: 'Нейтрально', keywords: ['нейтрально'] },
  { id: 'e-expressionless', category: 'smileys', label: 'Без эмоций', keywords: ['пусто'] },
  { id: 'e-sleeping', category: 'smileys', label: 'Сплю', keywords: ['сон', 'спать', 'zzz'] },
  { id: 'e-tired', category: 'smileys', label: 'Устал', keywords: ['усталость'] },
  { id: 'e-cry', category: 'smileys', label: 'Плач', keywords: ['грусть', 'слёзы'] },
  { id: 'e-sob', category: 'smileys', label: 'Рыдаю', keywords: ['слёзы', 'грусть'] },
  { id: 'e-angry', category: 'smileys', label: 'Злость', keywords: ['злой', 'гнев'] },
  { id: 'e-rage', category: 'smileys', label: 'Ярость', keywords: ['злость'] },
  { id: 'e-shock', category: 'smileys', label: 'Шок', keywords: ['удивление', 'шок'] },
  { id: 'e-fear', category: 'smileys', label: 'Страх', keywords: ['страх', 'испуг'] },
  { id: 'e-cool', category: 'smileys', label: 'Круто', keywords: ['крутой', 'очки'] },
  { id: 'e-nerd', category: 'smileys', label: 'Ботан', keywords: ['очки', 'умный'] },
  { id: 'e-sick', category: 'smileys', label: 'Болею', keywords: ['больной', 'маска'] },
  { id: 'e-mask', category: 'smileys', label: 'Маска', keywords: ['маска', 'больной'] },
  { id: 'e-party', category: 'smileys', label: 'Праздник', keywords: ['вечеринка', 'шапка'] },
  { id: 'e-star-eyes', category: 'smileys', label: 'Звёзды', keywords: ['восторг', 'звёзды'] },
  { id: 'e-heart-eyes', category: 'smileys', label: 'Влюблён', keywords: ['любовь', 'сердце'] },
  { id: 'e-kiss', category: 'smileys', label: 'Поцелуй', keywords: ['поцелуй'] },
  { id: 'e-tongue', category: 'smileys', label: 'Язык', keywords: ['шутка', 'язык'] },
  { id: 'e-sweat', category: 'smileys', label: 'Пот', keywords: ['нервы', 'пот'] },
  { id: 'e-dizzy', category: 'smileys', label: 'Головокружение', keywords: ['dizzy'] },

  { id: 'e-thumbs-up', category: 'gestures', label: 'Лайк', keywords: ['лайк', 'ok', 'да'] },
  { id: 'e-thumbs-down', category: 'gestures', label: 'Дизлайк', keywords: ['нет', 'минус'] },
  { id: 'e-clap', category: 'gestures', label: 'Аплодисменты', keywords: ['хлопать', 'браво'] },
  { id: 'e-wave', category: 'gestures', label: 'Привет', keywords: ['привет', 'рука'] },
  { id: 'e-pray', category: 'gestures', label: 'Молитва', keywords: ['спасибо', 'please'] },
  { id: 'e-muscle', category: 'gestures', label: 'Сила', keywords: ['сила', 'качок'] },
  { id: 'e-ok-hand', category: 'gestures', label: 'Ок', keywords: ['ok', 'хорошо'] },
  { id: 'e-victory', category: 'gestures', label: 'Победа', keywords: ['peace', 'v'] },
  { id: 'e-crossed-fingers', category: 'gestures', label: 'Удачи', keywords: ['удача'] },
  { id: 'e-point-up', category: 'gestures', label: 'Указать', keywords: ['вверх'] },
  { id: 'e-point-down', category: 'gestures', label: 'Вниз', keywords: ['вниз'] },
  { id: 'e-raised-hand', category: 'gestures', label: 'Рука', keywords: ['стоп', 'рука'] },
  { id: 'e-fist', category: 'gestures', label: 'Кулак', keywords: ['кулак', 'сила'] },
  { id: 'e-handshake', category: 'gestures', label: 'Рукопожатие', keywords: ['deal', 'договор'] },
  { id: 'e-writing', category: 'gestures', label: 'Пишу', keywords: ['писать'] },

  { id: 'e-red-heart', category: 'hearts', label: 'Сердце', keywords: ['любовь', 'сердце'] },
  { id: 'e-orange-heart', category: 'hearts', label: 'Оранжевое', keywords: ['сердце'] },
  { id: 'e-yellow-heart', category: 'hearts', label: 'Жёлтое', keywords: ['сердце'] },
  { id: 'e-green-heart', category: 'hearts', label: 'Зелёное', keywords: ['сердце'] },
  { id: 'e-blue-heart', category: 'hearts', label: 'Синее', keywords: ['сердце'] },
  { id: 'e-purple-heart', category: 'hearts', label: 'Фиолетовое', keywords: ['сердце'] },
  { id: 'e-black-heart', category: 'hearts', label: 'Чёрное', keywords: ['сердце'] },
  { id: 'e-white-heart', category: 'hearts', label: 'Белое', keywords: ['сердце'] },
  { id: 'e-broken-heart', category: 'hearts', label: 'Разбитое', keywords: ['грусть'] },
  { id: 'e-sparkling-heart', category: 'hearts', label: 'Искры', keywords: ['любовь'] },
  { id: 'e-two-hearts', category: 'hearts', label: 'Два сердца', keywords: ['любовь'] },
  { id: 'e-revolving-hearts', category: 'hearts', label: 'Вращение', keywords: ['любовь'] },

  { id: 'e-dog', category: 'animals', label: 'Собака', keywords: ['собака', 'пёс'] },
  { id: 'e-cat', category: 'animals', label: 'Кошка', keywords: ['кошка', 'кот'] },
  { id: 'e-mouse', category: 'animals', label: 'Мышь', keywords: ['мышь'] },
  { id: 'e-rabbit', category: 'animals', label: 'Кролик', keywords: ['кролик'] },
  { id: 'e-bear', category: 'animals', label: 'Медведь', keywords: ['медведь'] },
  { id: 'e-panda', category: 'animals', label: 'Панда', keywords: ['панда'] },
  { id: 'e-lion', category: 'animals', label: 'Лев', keywords: ['лев'] },
  { id: 'e-tiger', category: 'animals', label: 'Тигр', keywords: ['тигр'] },
  { id: 'e-fox', category: 'animals', label: 'Лиса', keywords: ['лиса'] },
  { id: 'e-wolf', category: 'animals', label: 'Волк', keywords: ['волк'] },
  { id: 'e-monkey', category: 'animals', label: 'Обезьяна', keywords: ['обезьяна'] },
  { id: 'e-chicken', category: 'animals', label: 'Курица', keywords: ['курица'] },
  { id: 'e-penguin', category: 'animals', label: 'Пингвин', keywords: ['пингвин'] },
  { id: 'e-unicorn', category: 'animals', label: 'Единорог', keywords: ['единорог'] },
  { id: 'e-butterfly', category: 'animals', label: 'Бабочка', keywords: ['бабочка'] },

  { id: 'e-pizza', category: 'food', label: 'Пицца', keywords: ['пицца', 'еда'] },
  { id: 'e-burger', category: 'food', label: 'Бургер', keywords: ['бургер'] },
  { id: 'e-fries', category: 'food', label: 'Фри', keywords: ['картошка'] },
  { id: 'e-hotdog', category: 'food', label: 'Хот-дог', keywords: ['хотдог'] },
  { id: 'e-cake', category: 'food', label: 'Торт', keywords: ['торт', 'день рождения'] },
  { id: 'e-cookie', category: 'food', label: 'Печенье', keywords: ['печенье'] },
  { id: 'e-coffee', category: 'food', label: 'Кофе', keywords: ['кофе'] },
  { id: 'e-beer', category: 'food', label: 'Пиво', keywords: ['пиво'] },
  { id: 'e-wine', category: 'food', label: 'Вино', keywords: ['вино'] },
  { id: 'e-apple', category: 'food', label: 'Яблоко', keywords: ['яблоко', 'фрукт'] },
  { id: 'e-banana', category: 'food', label: 'Банан', keywords: ['банан'] },
  { id: 'e-grape', category: 'food', label: 'Виноград', keywords: ['виноград'] },
  { id: 'e-watermelon', category: 'food', label: 'Арбуз', keywords: ['арбуз'] },
  { id: 'e-egg', category: 'food', label: 'Яйцо', keywords: ['яйцо'] },
  { id: 'e-bread', category: 'food', label: 'Хлеб', keywords: ['хлеб'] },

  { id: 'e-car', category: 'travel', label: 'Авто', keywords: ['машина', 'авто'] },
  { id: 'e-bus', category: 'travel', label: 'Автобус', keywords: ['автобус'] },
  { id: 'e-train', category: 'travel', label: 'Поезд', keywords: ['поезд'] },
  { id: 'e-airplane', category: 'travel', label: 'Самолёт', keywords: ['самолёт'] },
  { id: 'e-rocket', category: 'travel', label: 'Ракета', keywords: ['космос', 'ракета'] },
  { id: 'e-ship', category: 'travel', label: 'Корабль', keywords: ['корабль'] },
  { id: 'e-bike', category: 'travel', label: 'Велосипед', keywords: ['велосипед'] },
  { id: 'e-house', category: 'travel', label: 'Дом', keywords: ['дом'] },
  { id: 'e-mountain', category: 'travel', label: 'Гора', keywords: ['гора'] },
  { id: 'e-beach', category: 'travel', label: 'Пляж', keywords: ['море', 'пляж'] },

  { id: 'e-bulb', category: 'objects', label: 'Лампочка', keywords: ['идея', 'лампа'] },
  { id: 'e-phone', category: 'objects', label: 'Телефон', keywords: ['телефон'] },
  { id: 'e-laptop', category: 'objects', label: 'Ноутбук', keywords: ['компьютер'] },
  { id: 'e-camera', category: 'objects', label: 'Камера', keywords: ['фото'] },
  { id: 'e-gift', category: 'objects', label: 'Подарок', keywords: ['подарок'] },
  { id: 'e-balloon', category: 'objects', label: 'Шарик', keywords: ['праздник'] },
  { id: 'e-book', category: 'objects', label: 'Книга', keywords: ['книга'] },
  { id: 'e-key', category: 'objects', label: 'Ключ', keywords: ['ключ'] },
  { id: 'e-lock', category: 'objects', label: 'Замок', keywords: ['замок', 'безопасность'] },
  { id: 'e-clock', category: 'objects', label: 'Часы', keywords: ['время'] },
  { id: 'e-music', category: 'objects', label: 'Музыка', keywords: ['нота', 'музыка'] },
  { id: 'e-game', category: 'objects', label: 'Игра', keywords: ['геймпад', 'игра'] },

  { id: 'e-check', category: 'symbols', label: 'Галочка', keywords: ['да', 'ok'] },
  { id: 'e-cross', category: 'symbols', label: 'Крест', keywords: ['нет', 'ошибка'] },
  { id: 'e-exclamation', category: 'symbols', label: 'Внимание', keywords: ['!', 'важно'] },
  { id: 'e-question', category: 'symbols', label: 'Вопрос', keywords: ['?', 'вопрос'] },
  { id: 'e-fire', category: 'symbols', label: 'Огонь', keywords: ['огонь', 'hot'] },
  { id: 'e-star', category: 'symbols', label: 'Звезда', keywords: ['звезда'] },
  { id: 'e-sparkles', category: 'symbols', label: 'Искры', keywords: ['блеск', 'новый'] },
  { id: 'e-100', category: 'symbols', label: '100', keywords: ['сто', 'идеально'] },
  { id: 'e-plus', category: 'symbols', label: 'Плюс', keywords: ['плюс'] },
  { id: 'e-minus', category: 'symbols', label: 'Минус', keywords: ['минус'] },
  { id: 'e-warning', category: 'symbols', label: 'Предупреждение', keywords: ['warning'] },
  { id: 'e-recycle', category: 'symbols', label: 'Recycle', keywords: ['эко'] }
];

export const EMOJI_BY_ID = new Map(EMOJI_DEFINITIONS.map((item) => [item.id, item]));

export function isEmojiId(value: string) {
  return EMOJI_BY_ID.has(value);
}

export function searchEmojis(query: string) {
  const normalized = query.trim().toLowerCase();
  if (!normalized) return EMOJI_DEFINITIONS;
  return EMOJI_DEFINITIONS.filter(
    (item) =>
      item.label.toLowerCase().includes(normalized) ||
      item.id.includes(normalized) ||
      item.keywords.some((keyword) => keyword.includes(normalized))
  );
}
