using Plane.Communication;
using Plane.Copters;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
namespace Plane.CopterManagement
{
public interface ICopterManager : ICopterActionsSharedByCopterManager
{
///
/// 获取 实例的动态集合。
///
ObservableCollection AllCopters { get; }
///
/// 获取单个 实例。用 代替 null,使用时不必判断是否为 null。
///
ICopter Copter { get; }
///
/// 获取一个值,指示是否正在搜寻飞行器。
///
bool IsSearching { get; }
///
/// 获取被选中的 实例的动态集合。
///
ObservableCollection SelectedCopters { get; }
///
/// 添加或更新 实例。
///
/// 飞行器的唯一 ID。
/// 飞行器的名字。
/// 用于通信的 实例。
///
Task AddOrUpdateCopterAsync(string id, string name, IConnection connection);
///
/// 检查飞行器的状态,判断是否允许 FlyTo,若允许,飞往指定位置。
///
/// 目的地纬度。
/// 目的地经度。
/// 若允许并执行了 FlyTo,返回 true;否则返回 false。
Task CheckStatusAndFlyToAsync(double lat, double lng);
///
/// 连接一个新的 实例。
///
/// 要连接的 实例。
/// 表示此异步操作的 实例。
Task ConnectAsync(ICopter copter);
///
/// 开始搜索并连接飞行器。
///
void StartSearching();
///
/// 停止搜索飞行器。
///
void StopSearching();
}
}