import '../../connection/domain/binding_device.dart';

/// 账号体系与自助接口抽象（对应服务端 /api/auth/* 与 /api/client/*）。
abstract interface class AuthRepository {
  /// 内存中的 accessToken（掉线即失）。
  String? get accessToken;

  /// 从安全存储恢复令牌（应用启动时调用）。
  Future<void> restore();

  Future<bool> hasRefreshToken();

  Future<String?> getUsername();

  Future<Map<String, dynamic>> login(String username, String password);

  Future<Map<String, dynamic>> register(String username, String password);

  /// 刷新令牌：带单飞锁，并发调用共享同一次刷新结果。可能轮换 refreshToken。
  Future<Map<String, dynamic>> refresh();

  Future<Map<String, dynamic>> verify();

  /// 获取主控端已绑定的被控设备列表（含名称、鉴权方式等）。
  Future<List<BindingDevice>> getBindings();

  /// 获取已绑定且当前在线（信令网络活跃）的设备列表。
  Future<List<BindingDevice>> getOnlineDevices();

  /// 使用被控端展示的一次性配对码建立绑定关系。
  Future<void> redeemPairingCode(String code);

  /// 拉取 TURN 短期凭证（服务端开启时返回 iceServers）；关闭时返回 null。
  Future<Map<String, dynamic>?> turnCredentials();

  Future<void> clear();
}
