"""
warmup_messages.py -- Fallback message templates for warmup.
Used when Gemini AI is unavailable, rate-limited, or no API key.
All templates are safe -- no trigger words.
"""
import random
import re

GREETINGS = [
    # КАЖДЫЙ шаблон содержит spintax {a|b} — раскрывается в _expand_spintax().
    # Пул расширен с 16 до ~40 уникальных шаблонов, и каждый ещё ветвится
    # спинтаксом → реальная вариативность сотни вариантов.
    # До этого ~15 акков шлющих привет получали 1-2 одинаковых "Прив)"/"Ку!" → fingerprint.
    "{Привет|Приветик|Хай|Хей}!",
    "{Здорово|Здарова|Здаров|Даров}!",
    "{Ку|Куку|Ку-ку}!",
    "{Прив|Привки|Прифки})",
    "{Йоу|Йо|Йоха}!",
    "{Салют|Салютик|Аве}!",
    "О, {привет|здорово|ку}, {как дела|чё как|чё делаешь|как сам}?",
    "{Здарова|Здорово|Привет}, {чё как|как ты|чё делаешь}?",
    "{Хей|Хай}, {как жизнь|как ты|чё нового}?",
    "{Привет|Прив}, {как ты|как сам|чё нового|давно не общались}",
    "{Дороу|Доброго|Доброе утро}!",
    "{Здорово|Здаров|Даров}, {братиш|друг|чувак}",
    "О, {здорово|привет|ку}! Давно {не общались|не виделись|не было}",
    "{Привет|Прив|Хай}, {что нового|что у тебя|как сам}?",
    "{Доброе|Утречко|Здравствуй}!",
    "{Ку|Прив|Хай}, {чё делаешь|чем занят|чё там у тебя}?",
    "{Здаров|Здорово|Приветос}, {как сам|как житуха|как поживаешь}?",
    "{Йоу|Хей|Алоха}, {братан|друг|чел}",
    "{Алоха|Привет|Здарова|Хелло}!",
    "{Здарова|Здорово}, {чё нового|как ты|чё там}",
    "{Прив|Привет|Хай}!",
    "{О, привет|Привет, привет|Прив, прив})",
    "{Здорова|Здорово|Привет} {братиш|друг|чел}",
    "{Здарова|Здарово|Здорово}! {Чё как|Как сам|Как ты}",
    "{Хай|Хелло|Здравствуй}, {рад тебя видеть|как сам|давно не общались}",
    "{Привет|Прив}, {у тебя как|у тебя что нового|как сам поживаешь}",
    "{Дороу|Хей|Прив}!",
    "{Привет|Прив|Куку}, {скучал по тебе|давно не писал|как сам}",
    "{Здарова|Прив|Хай}, {не пропадай|пиши почаще|как там у тебя}",
    "О, {привет|здорово|ку}!",
    "{Привет|Здорово|Здарова}, {ты как|чё ты|чем занимаешься}",
]

TOPICS = {
    "weather": [
        "{Видел|Заметил} какая погода {сегодня|за окном}?",
        "Дождь {уже надоел|не прекращается}",
        "{Солнце|Тепло} наконец-то, красота",
        "Холодно {сегодня|что-то}, {бррр|замёрз}",
        "Погода класс, {надо гулять|хочется на улицу}",
        "Весна {наконец-то|уже}, {тепло|хорошо}",
        "За окном {дождь|пасмурно}, {лень выходить|сижу дома}",
        "Завтра {обещают|говорят} потеплеет",
        "{Жара|Духота} такая, невозможно",
        "Ветер {сильный|дикий} {сегодня|с утра}",
        "Снег {пошёл|идёт}, прикинь",
        "Хорошая {погодка|погода}, самое то {для прогулки|гулять}",
        "Туман {с утра|такой}, ничего не видно",
        "Скоро {лето|зима}, {ждать не могу|уже скорее бы}",
        "Облачно {что-то|сегодня}, {грустно|тоска}",
    ],
    "movies": [
        "{Смотрел|Видел} что-нибудь {недавно|интересное}?",
        "{Сериал|Фильм} новый вышел, {слышал|видел}?",
        "Вчера {кино|фильм} {посмотрел|глянул}, {норм|зашёл}",
        "Что {посоветуешь|порекомендуешь} посмотреть?",
        "Хочу какой-нибудь {боевик|комедию|триллер} глянуть",
        "Netflix {что-то выкатил|обновился}, видел?",
        "Мультик {новый|прикольный} вышел, для настроения самое то",
        "Ужастик {смотрел|глянул} на днях, {стрёмно было|жуть}",
        "Документалку {классную|интересную} нашёл",
        "Сериал {затянул|зашёл}, не могу оторваться",
        "Трейлер {видел|смотрел} новый? {Огонь|Выглядит круто}",
        "Кино в {кинотеатре|кино} давно не был, {надо сходить|хочу}",
        "Аниме {смотришь|интересуешься}?",
        "Старое кино {пересматривал|включил}, {классика|ностальгия}",
        "Какой жанр {любишь|предпочитаешь}?",
    ],
    "food": [
        "Что на {обед|ужин}?",
        "{Попробовал|Нашёл} {новое кафе|пиццерию}, {норм|вкусно}",
        "Готовил {вчера|сегодня} {пасту|суп}, {получилось|вышло норм}",
        "Хочу {пиццу|бургер|суши}, {давно не ел|аж слюни текут}",
        "Какую {кухню|еду} {любишь|предпочитаешь}?",
        "Завтрак {пропустил|не успел}, {голодный|есть хочу}",
        "Кофе {пью|сделал}, {без него никак|бодрит}",
        "{Фастфуд|Доставку} {заказал|хочу}, {лень готовить|не охота}",
        "Рецепт {классный|простой} нашёл, {попробую|надо сделать}",
        "{Торт|Десерт} {вкусный|обалденный} попробовал",
        "Мясо на гриле {жарил|делал}, {вкусно вышло|огонь}",
        "Салат {сделал|приготовил}, {здоровое питание|типа ПП}",
        "В {ресторан|кафе} {сходил|заглянул}, {понравилось|ничё так}",
        "Чай {зелёный|чёрный} {пью|заварил}, {вкусно|расслабляет}",
        "Перекусить бы {чем-нибудь|чем-то вкусным}",
    ],
    "sports": [
        "Футбол {смотришь|следишь}?",
        "{Бегал|Тренировался} {сегодня|вчера}?",
        "В зал {ходишь|хожу}, {надо форму|качаюсь}",
        "Матч {вчера|сегодня} {видел|смотрел}? {Огонь|Класс}!",
        "Хочу {начать бегать|на велик сесть}",
        "Плавание {люблю|хочу попробовать}, {освежает|кайф}",
        "Какой спорт {нравится|смотришь}?",
        "{Йога|Растяжка} {помогает|расслабляет}, {попробуй|советую}",
        "На {стадион|матч} давно не ходил",
        "Баскетбол {играл|смотрел}, {круто|класс}",
        "Велосипед {купил|хочу}, {кататься буду|для города}",
        "Лыжи {люблю|жду зиму для}, {каждый сезон|адреналин}",
        "Бокс {интересный|смотрю иногда}, {мощно|динамично}",
        "Шахматы {играешь|умеешь}? {Тоже спорт|прикольная штука}",
        "Утренняя {пробежка|зарядка} {бодрит|помогает проснуться}",
    ],
    "games": [
        "Во что {играешь|рубишься}?",
        "Новая игра {вышла|зашла}, {пробовал|видел}?",
        "Онлайн {играл|катал} вчера, {затянуло|весело}",
        "Мобильные игры {играешь|качаешь}?",
        "Стим {распродажа|скидки}, {купил|надо глянуть}",
        "Какой жанр {любишь|предпочитаешь}?",
        "РПГ {прохожу|начал}, {сюжет классный|затягивает}",
        "Онлайн {пострелялки|шутеры} {люблю|играю иногда}",
        "Гонки {прикольные|люблю}, {адреналин|скорость}",
        "Стратегии {интересные|нравятся}, {думать надо|прикольно}",
        "Ретро-игры {вспомнил|запустил}, {ностальгия|олдскул}",
        "Хоррор {прошёл|попробовал}, {стрёмно|жуть}",
        "Инди-игру {классную|годную} нашёл",
        "С друзьями {катали|играли}, {весело было|угарали}",
        "Обнову {скачал|поставил}, {новый контент|много нового}",
    ],
    "weekend": [
        "Какие планы на {выходные|вечер}?",
        "Куда {ездил|ходил} на выходных?",
        "В {парк|кино|торговый центр} {сходил|заглянул}",
        "Дома {сидел|отдыхал}, {ленился|спал|сериал смотрел}",
        "С друзьями {встречался|тусил}, {весело было|хорошо посидели}",
        "На природу {выбрался|ездил}, {классно|красиво}",
        "Шоппинг {ходил|сделал}, {купил себе|потратился}",
        "Выспался {наконец-то|за неделю}, {кайф|как заново родился}",
        "Гулял {по городу|в парке}, {хорошо|приятно}",
        "Уборку {сделал|затеял}, {чисто теперь|устал}",
        "На {концерт|выставку} {сходил|хочу}, {круто|интересно}",
        "Барбекю {делал|жарил}, {вкусно|классно посидели}",
        "Книгу {читал|начал}, {интересная|затянула}",
        "Весь день {спал|ничего не делал}, {заслужил|отдыхал}",
        "Поездку {планирую|хочу}, {куда-нибудь|за город}",
    ],
    "music": [
        "Что {слушаешь|играет}?",
        "{Скинь|Кинь} {плейлист|трек} какой-нибудь",
        "Новый {альбом|трек} {вышел|слышал}? {Огонь|Зашёл}",
        "Рэп {слушаешь|нравится}?",
        "Рок {классика|навсегда}, {люблю|иногда включаю}",
        "Электронная {музыка|музыка кайф}, {для настроения|бодрит}",
        "Подкаст {классный|интересный} нашёл",
        "На {концерт|фестиваль} {хочу|собираюсь}",
        "В наушниках {весь день|постоянно}, {без музыки никак|кайфую}",
        "Старые песни {слушаю|включил}, {ностальгия|классика}",
        "Какой жанр {предпочитаешь|больше нравится}?",
        "Плейлист {обновил|собрал}, {новый вайб|микс огонь}",
        "Инструментал {расслабляет|для фона идеально}",
        "Поп-музыку {иногда|тоже} слушаю, {не стыжусь|нормально}",
        "Радио {включил|слушаю}, {ретро|приятно}",
    ],
    "pets": [
        "{Кот|Собака} {как|что делает}?",
        "Хочу {щенка|котёнка|питомца} {завести|взять}",
        "Мой {кот|пёс} {спит весь день|опять натворил}",
        "Животных {любишь|есть дома}?",
        "Рыбки {прикольные|красивые}, {завёл|хочу аквариум}",
        "{Попугай|Хомяк} {смешной|прикольный}, {развлекает|веселит}",
        "С {собакой|псом} {гулял|ходил}, {набегался|устал}",
        "Кот {опять|снова} {разбудил|мяукает}, {5 утра|рано}",
        "Ветеринар {был|ходил}, {всё нормально|здоров}",
        "Фотки {питомца|кота} {кидай|покажи}",
        "Приют {для животных|видел}, {хочу помочь|жалко}",
        "{Кошачий|Собачий} корм {выбираю|купил новый}",
        "Дрессировка {идёт|получается}? {Сложно|Потихоньку}",
        "Питомец {лучший друг|антидепрессант}, {правда|факт}",
        "Видео с {котами|собаками} {смотрю|смешные}, {залипаю|угараю}",
    ],
    "travel": [
        "Куда {летом|в отпуск}?",
        "Был в {Питере|Сочи|Казани}? {Классно|Красиво} там",
        "Путешествовать {люблю|хочу}, {новые места|впечатления}",
        "Последний раз {ездил|летал} в {прошлом году|месяце}",
        "Море {хочу|скучаю по}, {скорее бы|отпуск бы}",
        "Горы {красивые|нравятся}, {был|хочу поехать}",
        "Автопутешествие {планирую|делал}, {свобода|кайф}",
        "Хостел или {отель|квартира}? Что {выбираешь|предпочитаешь}?",
        "Фотки из {поездки|путешествия} {классные|красивые}",
        "Местная {кухня|еда} в поездках {самое интересное|люблю пробовать}",
        "В {Европу|Азию} {хочу|мечтаю}, {когда-нибудь|обязательно}",
        "Поезд или {самолёт|авто}? {Что удобнее|как ездишь}?",
        "Кемпинг {пробовал|интересует}? {На природе|палатка}",
        "Экскурсии {люблю|хожу}, {интересно|познавательно}",
        "Чемодан {уже собрал|собираю}, {скоро еду|не терпится}",
    ],
    "tech": [
        "Телефон {новый|какой} у тебя?",
        "Обнову {поставил|накатил}? {Как оно|нормально}?",
        "Комп {тормозит|лагает}, {бесит|надо чинить}",
        "Приложение {классное|полезное} нашёл",
        "Интернет {быстрый|медленный} {у тебя|сегодня}?",
        "Наушники {какие|новые} {взял|хочу}?",
        "Ноутбук {выбираю|присматриваю}, {что посоветуешь|подскажи}",
        "Фотки на {телефон|камеру} {снимаю|люблю фоткать}",
        "Облачное {хранилище|место} {кончается|забито}",
        "Батарея {быстро|садится}, {зарядку ищу|бесит}",
        "Умные {часы|колонка} {купил|хочу}, {удобно|прикольно}",
        "Вайфай {отвалился|глючит}, {опять|классика}",
        "Скриншот {сделал|кидай}, {покажи|глянуть}",
        "Ютуб {залипаю|смотрю}, {время летит|затягивает}",
        "Мессенджеры {много|кучу} {использую|стоит}, {тг лучший|удобно}",
    ],
}

RESPONSES = [
    # Все шаблоны со spintax — расширяем вариативность.
    "{Ага|Угу|Да-да|Ага-ага}",
    "{Ну да|Да|Ну точно|Угу}",
    "{Хах|Ха-ха|Лол|Кек})",
    "{Прикольно|Интересно|Любопытно|Занятно}",
    "А {ты|у тебя|у вас}?",
    "{Согласен|Соглашусь|Поддерживаю|Тоже так думаю}",
    "{Ну такое|Так себе|Не очень|Бывает и лучше}",
    "{Вот да|Вот именно|Точно|Согласен}",
    "{Точно|Именно|Прям в точку|Угадал}",
    "{Реально|Серьёзно|Правда|Без шуток}",
    "{Факт|Это факт|Однозначно|Бесспорно}",
    "{Красава|Молодец|Респект|Уважаю})",
    "{Класс|Круто|Огонь|Топчик}",
    "{Жиза|Жизненно|Как у меня|Знакомо}",
    "{Ну норм|Нормально|Сойдёт|Окей}",
    "{Понял|Ясно|Понятно|Окей}",
    "{Ясно|Понял|Ага, понял}",
    "{Да ладно|Серьёзно|Не может быть|Прикинь}?",
    "{Серьёзно|Правда|Реально}?",
    "{Круто|Класс|Топ|Огонь}!",
    "{Ого|Ничесе|Ого-го|Вау}",
    "{Ничесе|Ого|Ого-го|Ничего себе}",
    "{Ну ок|Ладно|Окей|Понял}",
    "{Бывает|Случается|Это норм|Все мы такие}",
    "{Логично|Разумно|Здраво|Толково}",
    "{Вообще да|Вот именно|Точно|В точку}",
    "{Тоже так думаю|Согласен|У меня так же|Полностью поддерживаю}",
    "{Хах, прикольно|Лол|Хех, забавно|Ха, прикол}",
    "{Ну это да|Без вариантов|Вот именно})",
    "{Во-во|Вот да|Именно|Так и есть}",
    "{Хех|Кек|Ха}",
    "{Понимаю|Ага, понял|Дошло}",
    "{Бывает|Случается|Жизнь такая}",
    "Ну {ладно|окей|хорошо}",
    "{Не знал|Впервые слышу|Любопытно}",
    "{Реально|Да ну|Серьёзно}?",
]

TOPIC_RESPONSES = {
    "weather": [
        "Да, погода {вообще|сейчас} {странная|непредсказуемая}",
        "Надеюсь {завтра|скоро} {получше|нормально} будет",
        "А у нас {тут|здесь} {тоже|так же}",
    ],
    "movies": [
        "О, {надо|хочу} тоже {глянуть|посмотреть}",
        "Слышал {про это|об этом}, {говорят норм|хвалят}",
        "Я {больше|чаще} {сериалы|фильмы} {смотрю|предпочитаю}",
    ],
    "food": [
        "Ммм, {звучит вкусно|аж захотелось}",
        "Я {тоже|сам} {голодный|есть хочу})",
        "Надо {тоже|мне тоже} {попробовать|заказать}",
    ],
    "sports": [
        "Молодец, {я вот ленюсь|надо тоже начать}",
        "Спорт {это круто|полезно}, {уважаю|факт}",
        "{Тоже|Я тоже} {хочу начать|собираюсь}",
    ],
    "games": [
        "О, {в это|так же} {играл|играю}!",
        "{Скинь|Напиши} название, {гляну|попробую}",
        "Я {больше|чаще} в {телефон|комп} играю",
    ],
    "weekend": [
        "Звучит {классно|норм}, {отдохнул|хорошо}",
        "Я {тоже|так же} {отдыхал|гулял}",
        "Надо {тоже|чаще} {так|выбираться}",
    ],
    "music": [
        "О, {слушаю|тоже нравится} {такое|похожее}",
        "{Скинь|Кинь} {ссылку|название}, послушаю",
        "У меня {похожий|такой же} {вкус|плейлист}",
    ],
    "pets": [
        "{Милота|Прикольно}, {фоткай|покажи}!",
        "Хочу {тоже|себе такого} {завести|взять}",
        "Питомцы {лучшие|классные}, {согласен|факт}",
    ],
    "travel": [
        "О, {хочу|мечтаю} тоже {туда|так}!",
        "{Классно|Круто}, {завидую|тоже надо})",
        "Путешествия {это кайф|лучшее}",
    ],
    "tech": [
        "О, {тоже|у меня так же}",
        "{Понимаю|Знакомо}, {бесит|жиза})",
        "{Скинь|Напиши} что за {штука|приложение}",
    ],
}

GOODBYES = [
    "{Ладно|Ну ладно|Окей}, {побежал|пошёл|поехал}",
    "{Давай|Давай-давай|Лан}, до {связи|встречи|скорой}!",
    "{Пока|Пока-пока|Чао}!",
    "{Всё|Ну всё}, {я пошёл|я отвалюсь|до встречи}",
    "{Лан|Ладно|Окей}, {давай|пиши|до связи})",
    "{До скорого|До встречи|До связи}!",
    "{Увидимся|До встречи|До скорой встречи}!",
    "{Ну всё|Всё|Ок}, {пока|до связи})",
    "{Побежал|Помчал|Полетел}, {давай|удачи}!",
    "{Хорошего|Удачного|Прекрасного} {дня|вечера|настроения}!",
    "{Удачи|Хорошего дня|Береги себя}!",
    "{До завтра|До скорого|До связи}!",
    "{Ок|Ладно|Лан}, {я отвалюсь|выпадаю|пошёл}, пока)",
    "{Давай|Лан}, {напишу ещё|поговорим позже|спишемся}",
    "{Ладушки|Ладно|Хорошо}, пока!",
    "{Бывай|Чао|Удачи|Будь здоров}!",
    "{Лан|Ну|Окей}, {до связи|до встречи}",
    "{Всё|Ну вот}, {я выпадаю|отключаюсь}",
    "{Спишемся|Поговорим|Списываемся} {позже|потом|вечером}",
    "{Ну|Ладно|Окей}, я {спать|отдыхать|по делам}",
]

FILLERS = [
    # FILLERS используются как короткие междометия — рандомный микс из пула.
    # Расширенный пул, чтобы не повторялись одинаковые символы на N акках.
    "ага", "угу", "хах", "ммм", "))))", "))", "ок",
    "лол", "хех", "ну)", "да)", "не)", "эм", "кек",
    "ясно)", "ну такое)", "хмм", "уф", "о", "о-о",
    "хех)", "ха", "ну", "ну да", "м-да", "ну вот",
    "ага)", "ну ок", "норм", "м", "понял",
]


def _expand_spintax(text: str) -> str:
    """Expand {opt1|opt2|opt3} spintax patterns."""
    def _replace(m):
        opts = m.group(1).split("|")
        return random.choice(opts)
    return re.sub(r'\{([^}]+)\}', _replace, text)


def generate_template_message(
    phase: str,
    topic: str = "",
    is_response: bool = False,
) -> str:
    """Generate a message from templates.

    Args:
        phase: greeting / chatting / goodbye
        topic: topic key for chatting phase
        is_response: True if replying to partner's message
    """
    if phase == "greeting":
        # Приоритет: AI-пул приветствий → статичные GREETINGS со spintax.
        # AI-пул генерится через /api/ai/regenerate_pools — уникальный набор
        # под каждую инсталляцию TelePush (минус глобальная шаблонность).
        try:
            from core.ai_generator import pool_greetings as _pool_greetings
            ai_greetings = _pool_greetings()
            if ai_greetings:
                return random.choice(ai_greetings)
        except Exception:
            pass
        return _expand_spintax(random.choice(GREETINGS))

    if phase == "goodbye":
        return _expand_spintax(random.choice(GOODBYES))

    if phase == "chatting":
        if is_response:
            # 40% topic response, 40% generic response, 20% filler
            r = random.random()
            if r < 0.4 and topic in TOPIC_RESPONSES:
                return _expand_spintax(random.choice(TOPIC_RESPONSES[topic]))
            elif r < 0.8:
                return _expand_spintax(random.choice(RESPONSES))
            else:
                return random.choice(FILLERS)
        else:
            # New message on topic
            topic_msgs = TOPICS.get(topic, TOPICS["weather"])
            return _expand_spintax(random.choice(topic_msgs))

    return _expand_spintax(random.choice(RESPONSES))


def get_random_topic() -> str:
    """Pick a random conversation topic."""
    return random.choice(list(TOPICS.keys()))
