// Version: 1.0.0 | Created: 2026-04-02
// Synchronous MXC URI to HTTP URL resolution.
// Avatars and thumbnails in the room list / sync service need a resolved HTTP
// URL. The Matrix SDK's getDownloadUri() is async (checks authenticated media
// support), but for avatar display we need a synchronous result.
//
// This helper builds the legacy v3 media URL which works on all homeservers.

import 'package:matrix/matrix.dart';

/// Resolves an `mxc://` [Uri] to an HTTP download URL using the client's
/// homeserver. Returns `null` if the URI is not an mxc scheme or the client
/// has no homeserver set.
///
/// This is synchronous — suitable for use in non-async model mapping.
String? resolveMxcUrl(Client client, Uri? mxcUri) {
  if (mxcUri == null || !mxcUri.isScheme('mxc')) return null;
  final homeserver = client.homeserver;
  if (homeserver == null) return null;

  // Build the media download path per the Matrix spec.
  final serverName = mxcUri.host;
  final port = mxcUri.hasPort ? ':${mxcUri.port}' : '';
  final mediaId = mxcUri.path; // includes leading /
  return homeserver
      .resolve('_matrix/media/v3/download/$serverName$port$mediaId')
      .toString();
}
