using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using TeamAAS.Camera.Models;
namespace TeamAAS.Camera.Interfaces
{
///
/// 提供相机生命周期管理接口,包括创建、获取、注销相机实例以及品牌发现。
/// 实现类应保证线程安全,并在 Dispose 中释放所有已注册相机的资源。
///
public interface ICameraManager : IDisposable
{
Task CreateCameraAsync(Guid id, CameraInfo cameraInfo);
bool CreateCamera(Guid id, CameraInfo cameraInfo);
ICamera GetCamera(Guid id);
Task GetCameraAsync(Guid id);
IReadOnlyCollection GetAllCameras();
Task> GetAllCamerasAsync();
bool TryGetCamera(Guid id, out ICamera camera);
bool ContainsCamera(Guid id);
bool ContainsSN(string serialNumber);
bool RemoveCamera(Guid id);
Task RemoveCameraAsync(Guid id);
void UnRegisterCamera(Guid id);
Task UnRegisterCameraAsync(Guid id);
ICamera GetCameraByNumber(int number);
void RemoveAllCameras();
(bool IsSucceed, string Message) InitializeAllCameras(CameraInfo[] cameras);
Task<(bool IsSucceed, string Message)> InitializeAllCamerasAsync(CameraInfo[] cameras);
void UpdateCameraNumber(Guid id, int newNumber);
bool SaveConfig(string path = null);
IReadOnlyList GetAllCameraInfos();
// === 品牌/设备发现(原 CameraFactory 职责)===
List DiscoverAllDevices();
List DiscoverByBrand(string brand);
List<(string Brand, string DisplayName, bool Installed)> GetAvailableBrands();
string GetBrandDisplayName(string brand);
List<(string Name, bool Installed, string Version)> GetSdkStatus();
IReadOnlyList GetAvailableTypes();
}
}