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

[CreateAssetMenu(fileName = "PlayerData", menuName = "ScriptableObjects/Data/PlayerData")]
public class PlayerData : ScriptableObject, ISaveLoad
{
    public string playerName;
    public float playerHealth;

    // `[System.Serializable]` is needed for any class saved to a binary file
    [System.Serializable]
    class PlayerSaveData
    {
        public string playerName;
        public float playerHealth;
    }

    public void SetName(string newName)
    {
        playerName = newName;
    }

    public void SetHealth(string newHealth)
    {
        playerHealth = float.Parse(newHealth);
    }

    public string GetDataName()
    {
        return "PlayerData";
    }

    public string Load(string saveName)
    {
        PlayerSaveData data = SaveSystemUtilities.Load<PlayerSaveData>(GetDataName(), saveName);
        if (data != null)
        {
            playerName = data.playerName;
            playerHealth = data.playerHealth;
            return "";
        }
        else
        {
            return $"Data for {GetDataName()} in save {saveName} was not found";
        }
    }

    public string Reset()
    {
        playerName = "NoName";
        playerHealth = 100;
        return "";
    }

    public string Save(string saveName)
    {
        PlayerSaveData data = new PlayerSaveData();
        data.playerName = playerName;
        data.playerHealth = playerHealth;

        SaveSystemUtilities.Save<PlayerSaveData>(data, GetDataName(), saveName);
        return "";
    }
}
