# TTUI - Требование к приложению

## Описание приложения

Терминальный интерфейс для telegram

## Функциональные требования

### Интерфейс

┌─ TTUI ───────────────────────────────────────────────────────────────────────┐
│ 1:All │ 2:Personal │ 3:Work │ 4:Bots                                         │
├──────────────────────┬───────────────────────────────────────────────────────┤
│ 🔍 Search...         │ 👤 Mom (online)                                       │
├──────────────────────┼───────────────────────────────────────────────────────┤
│ 📌 Saved Messages    │                                          Today, Dec 21│
│ ▌ Mom             (2)│                                                       │
│   Boss               │  Mom ────────────────────────────────────────── 14:20 │
│   Rust Community     │  Привет! Ты покормил кота?                            │
│   Durov              │                                                       │
│   News Channel       │  You ─────────────────────────────────────── 14:22 ✓✓ │
│   Spam Bot           │  Да, конечно. Купил ему корм.                         │
│   Wife               │  Скоро буду дома.                                     │
│   Team Lead          │                                                       │
│   DevOps Chat     (9)│  Mom ────────────────────────────────────────── 14:23 │
│   Server Alerts      │  Отлично, захвати хлеба.                              │
│   Gym Bro            │                                                       │
│   Design Team        │  You ─────────────────────────────────────── 14:25 ✓  │
│   Project X          │  Ок.                                                  │
│   HR                 │                                                       │
│   Mom's Friend       │                                                       │
│   Taxi Bot           │                                                       │
│                      │                                                       │
│                      │                                                       │
│                      │                                                       │
│                      │                                                       │
│                      │                                                       │
├──────────────────────┼───────────────────────────────────────────────────────┤
│ [User: Online]       │ > **message**                                         │
└──────────────────────┴───────────────────────────────────────────────────────┘
  **commands**


### Список желаемого
1) футер - список папок в телеграме
2) список с чатами - лички и группы, сверху инпут для поиска чата
3) основной контент - открытый чат с сообщениями из чата, если никакой чат не открыт, то контент пустой, ничего не показываем. Снизу - инпут для ввода сообщения в чат, который открыт
4) снизу списка чата статус онлайн или нет сам пользователь приложения
5) при открытии чата должна загружаться история чата, а так же подгружаться новые сообщения от собеседника.
6) выделяем сообщения собеседника его никнеймом, группируем его сообщения и разделяем наши сообщения и сообщения собеседника, как на интерфейсе сверху
7) отображаем наше сообщение символом `✓`, если телеграм подтвердил, что сообщение отправлено, и выделяем `✓✓` если собеседник прочитал его
8) при навигации в чате выделяем строку курсивом, при выборе чата (то есть его открытии) ставим в начало символ ▌
9) `(2)` — счетчик непрочитанных (можно красить в красный/зеленый).
10) `muted` — статус чата (серый цвет).
11) `@` — пинг/меншн.
12) с видео/картинками/голосовые пока ничего не делаем, ренденим заглушку (с упоминанием что это картинка или видео и тд)

### Управление
1) ctrl+c или command+c - выход из программы
2) "h j k l" - влево, вниз, вверх, вправо (навигация в левом столбце) vim-style управление
3) стрелки - управление, так же как и "h j k l"
4) "command + 1", "command + 2" и так далее - переключение между папками, которые созданы в телеграме
5) из интерфейса "**message**" - это инпут для ввода сообщения в открытый чат
6) ctrl + s - фокус в инпут поиска чата
7) Esc - закрытие открытого чата
8) command + стрелка вверх (или ctrl + k) - выделяем самый верхний чат (без открытия)
9) поддержка русской раскладки: "р о л д" соответствует "h j k l"
10) `**commands**` - сюда вставь описания команд, которые есть в приложении

## Технологии
Пишем на rust-е

1) ratatui - для tui интерфейса
2) rust-tdlib - для подключения апи телеграма

## Нефункциональные требования

### Производительность
1) программа должна выдавать 60 фпс
2) интерфейс не должен мерцать
3) минимальное разрешение - 600 символов, максимального нет, не ограничиваем
