#pragma once

// file_poll_diff — diff puro entre dos snapshots de filesystem.
//
// Pareja natural de file_watcher: en plataformas sin inotify/RDCW (o cuando
// se quiere fallback portable), el caller toma snapshots periodicos via
// stat()/opendir() y los compara con esta funcion para emitir eventos
// added/modified/removed. Sin I/O, sin estado.

#include <cstdint>
#include <string>
#include <vector>

namespace fn_ui {

struct FileEntry {
    std::string path;
    uint64_t    size  = 0;
    int64_t     mtime = 0;  // unix seconds
};

struct FileDiff {
    std::vector<std::string> added;
    std::vector<std::string> modified;  // size o mtime distinto
    std::vector<std::string> removed;
};

// Pura: calcula diff entre dos snapshots por path. Asume entries con paths
// unicos en cada snapshot. Orden de los vectores: el orden en que aparecen
// los paths en `after` (added/modified) y en `before` (removed).
FileDiff file_poll_diff(const std::vector<FileEntry>& before,
                        const std::vector<FileEntry>& after);

} // namespace fn_ui
