#!/usr/bin/env python3
"""Generate 1000 unique tired mood sentences for Maven's TTS dataset."""

import random

random.seed(42)

# Templates and components for tired mood sentences
# Tired mood: "не знаешь или не можешь ответить" - don't know or can't answer

starters = [
    "не знаю", "без понятия", "сложно сказать", "трудно ответить", "хм",
    "ну", "может", "возможно", "наверное", "честно говоря",
    "если честно", "пожалуй", "допустим", "ладно", "ок",
    "блин", "угу", "ага", "типа того", "вроде",
    "кажется", "видимо", "похоже", "скорее всего", "как бы",
    "не уверена", "сомневаюсь", "вряд ли", "едва ли", "не думаю",
    "затрудняюсь", "не скажу", "не могу знать", "откуда мне знать", "почём я знаю",
    "слушай", "знаешь", "понимаешь", "смотри", "короче",
    "так себе", "ничего", "пусто", "тишина", "ничё",
    "да ладно", "ну такое", "не моё", "мимо", "не в тему",
    "утомилась", "устала", "сил нет", "без сил", "еле держусь",
    "не до того", "не сейчас", "потом", "неохота", "лень",
    "забей", "забудь", "пропусти", "не важно", "неважно",
    "не знаю даже", "даже не знаю", "прям не знаю", "вообще не знаю", "совсем не знаю",
    "не могу сказать", "не берусь судить", "не моя тема", "не в моей компетенции", "сложный вопрос",
    "вопрос на засыпку", "загвоздка", "подвох", "не всё так просто", "не всё однозначно",
    "хз", "без шансов", "без вариантов", "никак", "никоим образом",
    "мрачно", "тоскливо", "скука", "зевота", "сон клонит",
    "глаза слипаются", "мысли путаются", "голова не варит", "мозг кипит", "ресурс на нуле",
    "батарейка села", "аккумулятор пуст", "энергия кончилась", "заряд на исходе", "силы иссякли",
    "нет сил", "нет энергии", "нет настроения", "нет желания", "нет мотивации",
    "тяжело", "тяжко", "мучительно", "утомительно", "истощение",
    "выжата", "опустошена", "исчерпана", "на пределе", "на нуле",
    "сдаюсь", "капитуляция", "финал", "конец связи", "всё",
    "стоп", "пауза", "перерыв", "отдых", "тихий час",
    "отбой", "хватит", "довольно", "под завязку", "перегруз",
    "перегрузка", "перегрев", "сбой системы", "отключение", "режим сна",
    "спящий режим", "гибернация", "автовыключение", "нет сигнала", "нет связи",
    "обрыв", "разрыв", "пауза в эфире", "вне зоны", "вне доступа",
    "вне зоны доступа", "не на связи", "не в сети", "оффлайн", "вне игры",
]

middles = [
    "что тут сказать", "что ответить", "что подумать", "что делать", "как быть",
    "с одной стороны", "с другой стороны", "по сути", "по идее", "на деле",
    "на практике", "в теории", "в принципе", "в целом", "в общем",
    "по-моему", "по-моему мнению", "на мой взгляд", "как мне кажется", "как я вижу",
    "если подумать", "если поразмыслить", "если прикинуть", "если рассудить", "если честно",
    "нет сил думать", "нет сил гадать", "нет сил разбираться", "нет сил вникать", "нет сил объяснять",
    "не хочется лезть", "не хочется гадать", "не хочется вникать", "не хочется думать", "не хочется спорить",
    "голова не работает", "голова не соображает", "мысли не идут", "ответ не приходит", "решение не находится",
    "нет ясности", "нет понимания", "нет ответа", "нет идеи", "нет варианта",
    "слишком сложно", "слишком запутанно", "слишком неочевидно", "слишком абстрактно", "слишком размыто",
    "много неизвестных", "много переменных", "много вопросов", "много нюансов", "много деталей",
    "мало данных", "мало информации", "мало контекста", "мало фактов", "мало понимания",
    "не хватает времени", "не хватает сил", "не хватает энергии", "не хватает концентрации", "не хватает фокуса",
    "всё как в тумане", "всё как в облаке", "всё как в дымке", "всё зыбко", "всё неопределённо",
    "тупик", "ступор", "затык", "преграда", "препятствие",
    "сложная задача", "непростой вопрос", "хитрый момент", "тонкий момент", "щекотливый момент",
    "нужно время подумать", "нужно переварить", "нужно осмыслить", "нужно обдумать", "нужно разобраться",
    "я сейчас не в форме", "я не в ресурсе", "я не в тонусе", "я не в ударе", "я не на волне",
    "мысли в кашу", "мысли вразнобой", "мысли разбежались", "мысли потерялись", "мысли улетучились",
    "ответ ускользает", "ответ где-то рядом", "ответ не даётся", "ответ прячется", "ответ теряется",
    "мозг на перезагрузке", "система зависла", "процессор перегрет", "память заполнена", "диск переполнен",
    "файлы не грузятся", "данные не обрабатываются", "запрос не выполнен", "ответ не найден", "поиск неудачен",
    "поиски тщетны", "напрасные попытки", "безрезультатно", "безуспешно", "бесплодно",
    "попытки напрасны", "усилия тщетны", "старания бесполезны", "труды впустую", "всё зря",
    "ничего не выходит", "ничего не получается", "ничего не клеится", "ничего не сходится", "ничего не работает",
    "сбой в системе", "ошибка в программе", "баг в голове", "глюк в мозгу", "лаги мышления",
    "задержки ответа", "таймаут мышления", "истёк срок", "время вышло", "час пробил",
    "всё ушло", "всё кончилось", "всё закончилось", "всё иссякло", "всё выгорело",
    "выгорание полное", "эмоции на нуле", "чувства отключены", "реакции нет", "эмпатия отключена",
]

endings = [
    "прости", "извини", "виновата", "бывает", "что поделать",
    "такие дела", "вот так вот", "жизнь", "реальность", "действительность",
    "попробуй сам разберись", "разбирайся", "думай сам", "гадай сам", "ищи сам",
    "может позже", "может завтра", "может когда-нибудь", "может потом", "может ещё",
    "давай не сейчас", "давай в другой раз", "давай потом", "давай позже", "давай не сегодня",
    "я пас", "я сдаюсь", "я вне игры", "я в пролёте", "я мимо",
    "не моё", "не про меня", "не для меня", "не сегодня", "не сейчас",
    "устала", "вымоталась", "измучилась", "запарилась", "задолбалась",
    "хочу спать", "хочу отдохнуть", "хочу тишины", "хочу покоя", "хочу паузу",
    "мозг оффлайн", "мозг на перезагрузке", "мозг завис", "мозг отключился", "мозг ушёл в спящий режим",
    "всё", "конец", "финал", "точка", "стоп",
    "нет ответа", "нет сил", "нет желания", "нет мотивации", "нет энергии",
    "попробуй спросить у другого", "спроси кого-нибудь ещё", "найди другого", "обратись к другому", "это не ко мне",
    "я не тот человек", "я не подходящий собеседник", "я не в том состоянии", "я не в том настроении", "я не в ресурсе",
    "может искусственный интеллект поможет", "может гугл подскажет", "может кто-нибудь другой", "может не я", "может не сейчас",
    "я бы рада помочь", "я бы рада ответить", "я бы рада подсказать", "я бы рада объяснить", "я бы рада разобраться",
    "но не могу", "но сил нет", "но мыслей нет", "но идей нет", "но ответа нет",
    "пустота", "тишина", "ничего", "ноль", "нуль",
    "рабочий день кончился", "смена окончена", "всё на сегодня", "на этом всё", "занавес",
    "отдыхаю", "беру тайм-аут", "делаю перерыв", "ставлю на паузу", "отключаюсь",
    "засыпаю", "плыву", "таю", "исчезаю", "растворяюсь",
    "в ауте", "в нокауте", "в ступоре", "в тумане", "в облаках",
    "на дне", "на мели", "на исходе", "на пределе", "на грани",
    "до завтра", "до лучших времён", "до перезагрузки", "до восстановления", "до перезапуска",
    "пока", "прощай", "до связи", "не прощаюсь", "увидимся",
    "может завтра", "может послезавтра", "может на следующей неделе", "может через месяц", "может никогда",
    "не жди", "не надейся", "не рассчитывай", "не уповай", "не жди чуда",
    "чуда не будет", "волшебника нет", "феи не прилетят", "помощи ждать неоткуда", "спасения нет",
    "сама не знаю", "сама в растерянности", "сама в замешательстве", "сама в ступоре", "сама в тумане",
    "помоги себе сам", "решай сам", "действуй сам", "спасайся сам", "выкручивайся сам",
]

# Full sentence templates for variety
full_templates = [
    "не знаю что сказать, прости",
    "без понятия, честно",
    "сложно ответить, если честно",
    "трудно сказать что-то определённое",
    "хм, даже не знаю",
    "ну такое, не моё",
    "может когда-нибудь разберусь",
    "возможно я не тот человек",
    "наверное стоит спросить у другого",
    "честно говоря нет сил",
    "если честно устала",
    "пожалуй пропущу этот вопрос",
    "допустим я не знаю ответа",
    "ладно, давай не сейчас",
    "ок, но не сегодня",
    "блин, голова не варит",
    "угу, конечно",
    "ага, как же",
    "типа того, да",
    "вроде бы да, но нет",
    "кажется мне это не по зубам",
    "видимо не судьба",
    "похоже я пас",
    "скорее всего не мой вопрос",
    "как бы это сказать помягче",
    "не уверена что смогу помочь",
    "сомневаюсь что я подходящий человек",
    "вряд ли у меня есть ответ",
    "едва ли смогу помочь",
    "не думаю что это ко мне",
    "затрудняюсь с ответом",
    "не скажу точно",
    "не могу знать наверняка",
    "откуда мне знать такие вещи",
    "почём я знаю, спроси другого",
    "слушай, я сейчас не в форме",
    "знаешь, давай в другой раз",
    "понимаешь, сил нет совсем",
    "смотри, вопрос сложный",
    "короче, я пас",
    "так себе идея спрашивать меня",
    "ничего не приходит в голову",
    "пусто в голове",
    "тишина, ни одной мысли",
    "ничё не понимаю",
    "да ладно тебе, не дави",
    "ну такое себе вопросик",
    "не моё это, точно",
    "мимо кассы, спрашивай дальше",
    "не в тему вопрос",
    "утомилась я от таких вопросов",
    "устала думать сегодня",
    "сил нет разбираться",
    "без сил совсем",
    "еле держусь на ногах",
    "не до того мне сейчас",
    "не сейчас, правда",
    "потом как-нибудь",
    "неохота вникать",
    "лень разбираться честно",
    "забей на этот вопрос",
    "забудь что спрашивал",
    "пропусти этот момент",
    "не важно это сейчас",
    "неважно в данном контексте",
    "не знаю даже с какой стороны подойти",
    "даже не знаю что подумать",
    "прям не знаю что сказать",
    "вообще не знаю как ответить",
    "совсем не знаю что делать",
    "не могу сказать ничего определённого",
    "не берусь судить об этом",
    "не моя тема точно",
    "не в моей компетенции вопрос",
    "сложный вопрос для меня сейчас",
    "вопрос на засыпку честно",
    "загвоздка в том что не знаю",
    "подвох чувствуется но не понимаю где",
    "не всё так просто как кажется",
    "не всё однозначно тут",
    "хз что сказать",
    "без шансов у меня",
    "без вариантов ответа",
    "никак не могу сформулировать",
    "никоим образом не могу помочь",
    "мрачно как-то на душе от вопроса",
    "тоскливо отвечать когда не знаешь",
    "скука смертная думать об этом",
    "зевота одолевает",
    "сон клонит страшный",
    "глаза слипаются не шутя",
    "мысли путаются совсем",
    "голова не варит сегодня",
    "мозг кипит от перегруза",
    "ресурс на нуле абсолютном",
    "батарейка села полностью",
    "аккумулятор пуст в ноль",
    "энергия кончилась вся",
    "заряд на исходе критическом",
    "силы иссякли совсем",
    "нет сил даже думать",
    "нет энергии на ответ",
    "нет настроения объяснять",
    "нет желания вникать",
    "нет мотивации разбираться",
    "тяжело формулировать мысли",
    "тяжко подбирать слова",
    "мучительно искать ответ",
    "утомительно поддерживать разговор",
    "истощение полное",
    "выжата как лимон",
    "опустошена полностью",
    "исчерпана совсем",
    "на пределе возможностей",
    "на нуле абсолютно",
    "сдаюсь без боя",
    "капитуляция полная",
    "финал истории",
    "конец связи, пока",
    "всё, я всё",
    "стоп машина",
    "пауза на неопределённо",
    "перерыв до лучших времён",
    "отдых, не мешай",
    "тихий час, не звони",
    "отбой, все свободны",
    "хватит с меня",
    "довольно на сегодня",
    "под завязку загружена",
    "перегруз, отключаюсь",
    "перегрузка системы",
    "перегрев мозга",
    "сбой системы, перезагрузка",
    "отключение от сети",
    "режим сна активирован",
    "спящий режим включён",
    "гибернация запущена",
    "автовыключение через секунду",
    "нет сигнала, не найдена",
    "нет связи, абонент недоступен",
    "обрыв соединения",
    "разрыв контакта",
    "пауза в эфире",
    "вне зоны покрытия",
    "вне доступа сейчас",
    "вне зоны доступа, попробуйте позже",
    "не на связи сегодня",
    "не в сети, не онлайн",
    "оффлайн полностью",
    "вне игры, замените игрока",
    "голова кругом идёт",
    "мысли разбежались кто куда",
    "слова теряются на подходе",
    "фразы рассыпаются",
    "предложения не строятся",
    "конструкций нет в наличии",
    "аргументы исчерпаны",
    "доводы закончились",
    "контраргументов нет",
    "позиция не определена",
    "мнение не сформировано",
    "точка зрения отсутствует",
    "понимание вопроса на нуле",
    "компетенция в теме минимальна",
    "экспертиза не моя",
    "не мой участок работы",
    "не моя зона ответственности",
    "не моя территория",
    "не мой формат совсем",
    "не мой стиль отвечать",
    "не мой уровень компетенции",
    "не мой диапазон знаний",
    "не мой запас информации",
    "не мой опыт в этом",
    "не моя практика",
    "не моя специализация точно",
    "не мой профиль",
    "не мой конёк",
    "не мой случай",
    "не мой пример",
    "не мой прецедент",
]

# Generate sentences ensuring uniqueness and limited starter repetition
generated = set()
starter_counts = {}

def build_sentence():
    """Build a varied tired mood sentence."""
    strategy = random.choice(['template', 'combo', 'short', 'medium'])
    
    if strategy == 'template':
        return random.choice(full_templates)
    elif strategy == 'short':
        return random.choice(starters) + ", " + random.choice(endings)
    elif strategy == 'medium':
        return random.choice(starters) + " " + random.choice(middles)
    else:  # combo
        parts = random.randint(2, 3)
        if parts == 2:
            return random.choice(starters).capitalize() + ", " + random.choice(endings)
        else:
            return random.choice(starters).capitalize() + " " + random.choice(middles) + ", " + random.choice(endings)

attempts = 0
max_attempts = 50000

while len(generated) < 1000 and attempts < max_attempts:
    attempts += 1
    sentence = build_sentence()
    
    # Check starter similarity
    starter = sentence.split()[0].lower().rstrip(',.!?')
    if starter not in starter_counts:
        starter_counts[starter] = 0
    
    if starter_counts[starter] >= 10:
        continue
    
    # Ensure uniqueness
    if sentence not in generated:
        generated.add(sentence)
        starter_counts[starter] += 1

# Write to file
output_path = "/home/kami/Programs/esp32-whisper-fine-tune/tts/data/tired-voice-dataset-list.txt"
with open(output_path, 'w', encoding='utf-8') as f:
    for i, sentence in enumerate(sorted(generated), 1):
        f.write(f"{sentence}\n")

print(f"Generated {len(generated)} unique sentences")
print(f"Saved to {output_path}")
print(f"Starter distribution: {len(starter_counts)} unique starters")
print(f"Max starter count: {max(starter_counts.values()) if starter_counts else 0}")
