using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using TeamAAS.Database.Models;
namespace TeamAAS.Database.Interfaces
{
///
/// 数据库管理器接口。
/// 负责多数据库实例的生命周期管理、配置持久化以及提供者发现。
///
public interface IDatabaseManager : IDisposable
{
///
/// 创建数据库实例
///
/// 唯一标识
/// 数据库配置
/// 是否创建成功
bool CreateDatabase(Guid id, DatabaseConfig config);
///
/// 异步创建数据库实例
///
Task CreateDatabaseAsync(Guid id, DatabaseConfig config);
///
/// 获取指定数据库实例
///
IDatabase GetDatabase(Guid id);
///
/// 尝试获取数据库实例
///
bool TryGetDatabase(Guid id, out IDatabase database);
///
/// 是否包含指定数据库
///
bool ContainsDatabase(Guid id);
///
/// 获取所有数据库实例
///
IReadOnlyCollection GetAllDatabases();
///
/// 移除数据库实例
///
bool RemoveDatabase(Guid id);
///
/// 异步移除数据库实例
///
Task RemoveDatabaseAsync(Guid id);
///
/// 移除所有数据库
///
void RemoveAllDatabases();
///
/// 初始化所有数据库(根据配置创建实例)
///
/// 数据库配置数组
/// 是否成功
(bool IsSucceed, string Message) InitializeAllDatabases(DatabaseConfig[] configs);
///
/// 异步初始化
///
Task<(bool IsSucceed, string Message)> InitializeAllDatabasesAsync(DatabaseConfig[] configs);
///
/// 获取所有数据库配置
///
IReadOnlyList GetAllDatabaseConfigs();
///
/// 保存配置到指定路径
///
bool SaveConfig(string path = null);
///
/// 获取可用的数据库提供者列表(反射发现)
///
List GetAvailableProviders();
}
}