using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameStatePersistenceManager : MonoBehaviour
{
    #region Singleton
    private static GameStatePersistenceManager _instance;

    // Public reference to the singleton instance
    public static GameStatePersistenceManager Instance
    {
        get
        {
            // If the instance doesn't exist, try to find it in the scene
            if (_instance == null)
            {
                _instance = FindObjectOfType<GameStatePersistenceManager>();

                // If it's still null, create a new GameObject and add the component
                if (_instance == null)
                {
                    GameObject singletonObject = new GameObject(typeof(GameStatePersistenceManager).Name);
                    _instance = singletonObject.AddComponent<GameStatePersistenceManager>();
                }
            }
            return _instance;
        }
    }
    #endregion

    
    protected void Awake()
    {
        // Ensure there's only one instance
        if (_instance != null && _instance != this)
        {
            Destroy(gameObject);
            return;
        }

        // If this is the first instance, set it as the singleton
        _instance = this;
        DontDestroyOnLoad(gameObject);

    }

    public void SaveData(string key, object value)
    {
        string jsonData = JsonUtility.ToJson(value);

        Debug.Log($"Saving: {key} = {jsonData}");

        PlayerPrefs.SetString(key, jsonData);
    }

    public bool HasDataForKey(string key)
    {
        return PlayerPrefs.HasKey(key);
    }
    public T LoadData<T>(string key)
    {
        string jsonData = PlayerPrefs.GetString(key);

        Debug.Log($"Loading: {key} = {jsonData}");

        return JsonUtility.FromJson<T>(jsonData);
    }
}
