@startuml wallenc_01_start_and_sync
' Увеличенный растр для вставки в отчёт (Word / печать)
scale 3
title
Wallenc — старт приложения и параллельная синхронизация
(проектное решение; фоновая синхронизация к реализации)
end title

skinparam defaultFontName "DejaVu Sans"
skinparam activity {
  BackgroundColor #F8F8F8
  BorderColor #333333
  DiamondBackgroundColor #E8F4FF
}
skinparam noteBackgroundColor #FFFDE7
skinparam noteBorderColor #F9A825

start

:Старт приложения (Android);

:Инициализация Room,
загрузка метаданных vault;

if (Есть сохранённые vault?) then (нет)
  :Экран «первый запуск» /
  создание локального vault;
else (да)
endif

if (Нужен удалённый провайдер
и нет учётной записи?) then (да)
  :Экран удалённых vault /
  OAuth Яндекс;
else (нет)
endif

partition "**Основной поток (UI)**" {
  :(A) Главный экран:
  список локальных и удалённых vault;
  :Действия пользователя
  (открыть, зашифровать, содержимое…);
}

fork
  partition "**Фон: синхронизация (по таймеру)**" #E8F5E9 {
    note right
      **Проектная механика (не реализовано в коде)**
      • Таймер / WorkManager Android
      • Таблица в Room: UUID **storage_id**
        для очереди синхронизации
      • Для каждого storage — **история коммитов**
        (аналог git): дерево/цепочка снимков
      • Сервис: сравнение коммитов
        локально vs удалённо → вычисление diff
      • Применение изменений →
        **одинаковое зашифрованное содержимое**
        на клиенте и у провайдера
      (ключи на сервер не передаются)
    end note
    :По срабатыванию таймера:
    запуск **SyncService** / Worker;
    :Чтение из БД списка
    **UUID storage** из очереди;
    while (Есть необработанный UUID?) is (да)
      :Загрузить историю **коммитов**
      для этого Storage (локально + у провайдера);
      :Найти расхождения
      (common ancestor / merge);
      :Свести содержимое
      к единому состоянию;
      :Обновить очередь /
      метаданные синхронизации;
    endwhile (нет)
  }
end fork

stop

@enduml
