using System.Collections.Generic;
using System.Threading.Tasks;
namespace BaseGames.Core
{
///
/// 存档服务接口。对外暴露存档系统的全部公开 API,供其他模块通过 ServiceLocator 访问。
/// 实现由 BaseGames.Core.Save 程序集的 SaveManager 经 SaveServiceAdapter 桥接提供。
///
public interface ISaveService
{
// ── I/O 操作 ──────────────────────────────────────────────────────
/// 将当前游戏状态写入指定存档槽。
Task SaveAsync(int slot);
/// 从指定存档槽加载游戏状态。成功返回 true,存档损坏/不存在返回 false。
Task LoadAsync(int slot);
/// 快速存档(覆盖快速存档槽,fire-and-forget)。
void QuickSave();
/// 快速读档(从快速存档槽加载,fire-and-forget)。
void QuickLoad();
/// 快速读档(awaitable 版本)。
Task QuickLoadAsync();
/// 指定槽是否存在有效存档。
bool HasSave(int slot);
/// 当前活跃存档槽(0–2)。
int ActiveSlot { get; }
/// 删除指定存档槽数据。
Task DeleteSlotAsync(int slot);
// ── 存档点 ────────────────────────────────────────────────────────
/// 上次存档时的场景名(用于死亡复活跳转)。
string LastCheckpointScene { get; }
/// 上次存档时的出生点 ID。
string LastCheckpointSpawnId { get; }
// ── 世界状态查询 ──────────────────────────────────────────────────
/// 指定收藏物 ID 是否已拾取。
bool IsWorldCollected(string id);
/// 指定门 / 进程锁 ID 是否已开启。
bool IsDoorOpened(string id);
/// 指定 Boss ID 是否已被击败。
bool IsBossDefeated(string bossId);
/// 当前存档中玩家最大 HP(存档未加载时返回 0)。
int GetPlayerMaxHP();
/// 是否为指定挑战房间的首次通关(首次调用返回 true 并标记)。
bool IsFirstClear(string challengeId);
// ── 世界标志 & 事件链 ─────────────────────────────────────────────
/// 读取世界标志位。
bool GetFlag(string flagId);
/// 写入世界标志位。
void SetFlag(string flagId, bool value);
/// 获取所有已完成的事件链 ID。
IEnumerable GetCompletedChains();
/// 标记某条事件链已完成。
void SetChainCompleted(string chainId);
}
}