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

namespace mgaia.Utils
{
    /// <summary>
    /// Apontador utilizado para retornar todas as chaves de localização de um sessão
    /// </summary>
    /// <owner>Victor</owner>
    public class LocalizedSessionHandle
    {
        private BaseLocalizationParser mFallbackLocalizationParser;
        private BaseLocalizationParser mCurrentLocalizationParser;
        private string mSession;
        private bool mUsesFallback;

        private LocalizedSessionHandle(string session, BaseLocalizationParser localizationParser, bool usesFallback)
        {
            mCurrentLocalizationParser = localizationParser;

            mSession = session;
            mUsesFallback = usesFallback;
        }

        internal LocalizedSessionHandle(string session, BaseLocalizationParser fallbackLocalizationParser, BaseLocalizationParser currentLocalizationParser)
            : this(session, currentLocalizationParser, true)
        {
            Assert.AssertTrue(fallbackLocalizationParser != null, "fallBackLocalizationParser não pode ser nulo!");

            mFallbackLocalizationParser = fallbackLocalizationParser;
        }

        internal LocalizedSessionHandle(string session, BaseLocalizationParser localizationParser)
            : this(session, localizationParser, false)
        {
            Assert.AssertTrue(localizationParser != null, "localizationParser não pode ser nulo!");
        }

        /// <summary>
        /// Retorna o texto contido na chave
        /// </summary>
        public string GetText(string key)
        {
            string text = String.Empty;

            if (mCurrentLocalizationParser != null && mCurrentLocalizationParser.ContainsSession(mSession) && mCurrentLocalizationParser.ContainsKey(mSession, key))
            {
                text = mCurrentLocalizationParser.GetText(mSession, key);
            }
            else if (mUsesFallback && mFallbackLocalizationParser.ContainsSession(mSession) && mFallbackLocalizationParser.ContainsKey(mSession, key))
            {
                text = mFallbackLocalizationParser.GetText(mSession, key);
            }
            else
            {
                Assert.AssertTrue(false, "O texto de chave " + key + " não foi achado na sessão " + mSession);
            }

            return text.Replace("\\n", "\n");
        }
    }
}