#nullable enable
using System;
using IGP.UnitySDK;
using UnityEngine;

public sealed class IGPExampleAchievements : MonoBehaviour
{
    [SerializeField] private IGPRuntimeManager? runtime = null;
    [SerializeField] private string unlockAchievementKey = "first_session";
    [SerializeField] private string progressAchievementKey = "matches_played";

    private void Awake()
    {
        runtime ??= FindObjectOfType<IGPRuntimeManager>();
    }

    public async void UnlockAchievement()
    {
        if (runtime == null)
        {
            return;
        }

        try
        {
            var result = await IGPSDK.UnlockAchievementAsync(runtime, unlockAchievementKey);
            Debug.Log($"Unlock success={result.success}, duplicated={result.duplicated}");
        }
        catch (Exception exception)
        {
            Debug.LogError($"Unlock failed: {exception.Message}");
        }
    }

    public async void ReportProgress()
    {
        if (runtime == null)
        {
            return;
        }

        try
        {
            var result = await IGPSDK.ReportAchievementProgressAsync(
                runtime,
                progressAchievementKey,
                1d,
                "sample_match_complete");
            Debug.Log($"Progress success={result.success}, duplicated={result.duplicated}");
        }
        catch (Exception exception)
        {
            Debug.LogError($"Progress failed: {exception.Message}");
        }
    }
}
