import '../api/marianumcloud/talk/chat/get_chat_response.dart';
import '../api/marianumcloud/webdav/queries/list_files/cacheable_file.dart';

/// References a file that already lives on the Nextcloud server. Used by the
/// in-app share/save flows that operate on remote paths instead of local
/// cache files (no upload needed).
class RemoteFileRef {
  final String path;
  final String name;

  /// Nextcloud's instance-local file id, when known. Preferred over [path]
  /// for hitting the preview API — the path-based variant is unreliable on
  /// some server configurations.
  final int? fileId;

  /// Server's `nc:has-preview` flag when known. null = unknown.
  final bool? hasPreview;

  const RemoteFileRef({
    required this.path,
    required this.name,
    this.fileId,
    this.hasPreview,
  });

  /// Caller must verify `file.path != null` first — Talk message parameters
  /// without a path (system events, mentions, polls) are not file refs.
  factory RemoteFileRef.fromTalk(RichObjectString file) => RemoteFileRef(
    path: file.path!,
    name: file.name,
    fileId: int.tryParse(file.id),
  );

  factory RemoteFileRef.fromCacheable(CacheableFile file) => RemoteFileRef(
    path: file.path,
    name: file.name,
    fileId: file.fileId,
    hasPreview: file.hasPreview,
  );
}
