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

namespace mgaia.Utils.Persistence
{
	/// <summary>
	/// Classe que gerencia um arquivo de persistência
	/// </summary>
	/// <owner>Victor</owner>
	public class PersistenceManager
	{
		private IPersistenceFileInterface _mPersistenceFileInterface;

		/// <summary>
		/// Interface utilizada para se comunicar com o arquivo de persistência
		/// </summary>
		protected IPersistenceFileInterface PersistenceFileInterface
		{
			get { return _mPersistenceFileInterface; }
		}

		public PersistenceManager(IPersistenceFileInterface persistenceFileInterface)
		{
			_mPersistenceFileInterface = persistenceFileInterface;
		}

		/// <summary>
		/// Testa se a chave enviada existe
		/// </summary>
		public virtual bool HasKey(string key)
		{
			return PersistenceFileInterface.HasKey(key);
		}

		/// <summary>
		/// Retorna a string contida na chave, caso não exista, o valor padrão é retornado
		/// </summary>
		public virtual string GetString(string key, string defaultValue)
		{
			return PersistenceFileInterface.GetString(key, defaultValue);
		}

		/// <summary>
		/// Retorna o int32 contido na chave, caso não exista, o valor padrão é retornado
		/// </summary>
		public virtual int GetInt32(string key, int defaultValue)
		{
			return PersistenceFileInterface.GetInt32(key, defaultValue);
		}

		/// <summary>
		/// Retorna o float contido na chave, caso não exista, o valor padrão é retornado
		/// </summary>
		public virtual float GetFloat(string key, float defaultValue)
		{
			return PersistenceFileInterface.GetFloat(key, defaultValue);
		}

		/// <summary>
		/// Seta uma string na chave
		/// </summary>
		public virtual void SetString(string key, string value)
		{
			PersistenceFileInterface.SetString(key, value);
		}

		/// <summary>
		/// Seta um int32 na chave
		/// </summary>
		public virtual void SetInt32(string key, int value)
		{
			PersistenceFileInterface.SetInt32(key, value);
		}

		/// <summary>
		/// Seta um float na chave
		/// </summary>
		public virtual void SetFloat(string key, float value)
		{
			PersistenceFileInterface.SetFloat(key, value);
		}

		/// <summary>
		/// Deleta uma chave
		/// </summary>
		public virtual void DeleteKey(string key)
		{
			PersistenceFileInterface.DeleteKey(key);
		}

		/// <summary>
		/// Deleta todas as chaves
		/// </summary>
		public virtual void DeleteAll()
		{
			PersistenceFileInterface.DeleteAll();
		}

		/// <summary>
		/// Salva o arquivo
		/// </summary>
		public virtual void Save()
		{
			PersistenceFileInterface.Save();
		}
	}
}