// lib/remote/collection_source_remote_ext.dart
//
// Versione riscritta, semplice e stabile.
// Nessuna cache remota, nessun diff complicato.
// Aggiunge sempre i remoti dal DB alla Collection.
// Compatibile con il tuo remote_controller attuale.

import 'package:aves/model/source/collection_source.dart';
import 'package:aves/model/source/events.dart';
import 'package:aves/services/common/services.dart';
import 'package:flutter/foundation.dart';

import 'remote_origin.dart';
import 'package:aves/remote/remote_sync_bus.dart';

extension CollectionSourceRemoteExt on CollectionSource {
  // ============================================================
  //   CARICAMENTO REMOTI DAL DB (VERSIONE SEMPLICE)
  // ============================================================

  Future<void> appendRemoteEntriesFromDb() async {
    try {
      // 1) carica tutte le entry remote dal DB
      final remotiDb = await localMediaDb.loadEntries(origin: RemoteOrigin.value);

      if (remotiDb.isEmpty) {
        debugPrint('[remote-append] nessun remoto nel DB');
        return;
      }

      // 2) tieni solo quelli non cestinati
      final visibili = remotiDb.where((e) => !e.trashed).toSet();
      if (visibili.isEmpty) {
        debugPrint('[remote-append] tutti remoti cestinati → nessun add');
        return;
      }

      // 3) aggiungi alla Collection (merge automatico)
      addEntries(visibili);

      // 4) notifica la UI
      eventBus.fire(EntryAddedEvent(visibili));

      debugPrint('[remote-append] aggiunti=${visibili.length}');
    } catch (e, st) {
      debugPrint('[remote-append] errore: $e\n$st');
    }
  }
}

/// Visibilità dei remoti (usata da CollectionLens)
extension RemoteVisibilityExt on CollectionSource {
  bool get remoteVisible {
    final state = RemoteSyncBus.instance.stateNotifier.value;
    return state == RemoteSyncState.syncing ||
           state == RemoteSyncState.upToDate;
  }
}
