#nullable enable
using System.Threading.Tasks;
using IGP.UnitySDK.Models;

namespace IGP.UnitySDK.Abstractions
{
    /// <summary>
    /// Unity adapter side contract for accessing IGP runtime capabilities.
    /// This interface intentionally does not expose legacy runtime-specific types.
    /// </summary>
    public interface IIGPRuntimeClient
    {
        Task<AchievementReportResult> UnlockAchievementAsync(
            string achievementKey,
            string? eventId = null,
            long? occurredAtUnixMs = null,
            int? appId = null);

        Task<AchievementReportResult> ReportAchievementProgressAsync(
            string achievementKey,
            double progressValue,
            string? progressSourceKey = null,
            string? eventId = null,
            long? occurredAtUnixMs = null,
            int? appId = null);

        Task<AchievementClearResult> ClearAchievementsAsync(int? appId = null);
    }
}
