using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RichTextMgr {
    private static RichTextMgr _inst = null;
    public static RichTextMgr Inst {
        get {
            if (_inst == null) {
                _inst = new RichTextMgr();
                _inst.Init();
            }
            return _inst;
        }
    }
    private void Init()
    {
        // new RichMoveEvent();
        new RichTableEvent();
        new RichNormalEvent();
        // new RichFbEvent();
        new RichShowPlayerEvent();
    }
    public RichText presentRichText = null;
    /// 
    /// Text 富文本解析
    /// 
    /// 
    /// 
    public string Analysis(string _text,out List imgList,out List hrefList,RichText text=null)
    {
        imgList = new List();
        m_ImgInfoList = imgList;
        hrefList = new List();
        m_HrefInfoList = hrefList;
        presentRichText = text;
        string result=GetAnalysis(_text);
        //for (int i = 0; i < m_ImgInfoList.Count; i++) {
            ImgAnalysis.Inst.CalculateTextIndex(result, 0);
        //}
        return result;
    }
    public string Analysis(string val)
    {
        m_HrefInfoList = null;
        m_ImgInfoList = null;
        return GetAnalysis(val);
    }
    private string GetAnalysis(string val)
    {
        string result = ImgAnalysis.ReplaceFace(val);
        try
        {
            result = ColorAnalysis.Inst.Analysis(result, true);
            result = WordAnalysis.Inst.ReplaceSpace(result);
            result = ImgAnalysis.Inst.Analysis(result, true);
            result = WordAnalysis.Inst.Analysis(result, true);
            result = HrefAnalysis.Inst.Analysis(result, true);
            result = SuitNameAnalysis.Inst.Analysis(result, true);
            result = HrefAnalysis.Inst.CalculateTextIndex(result, 0);
        }
        catch (System.Exception e)
        {
            Debug.LogError(e.Message+e.StackTrace);
        }
        return result;
    }
    public class HrefInfo
    {
        public int start = 0;
        public int end = 0;
        public List boxs=new List();
        public List lines = new List();
        public Dictionary mSplits = new Dictionary();
        public List mEvents = new List();
        public int start_cache_cnt = 0;
        public int end_cache_cnt = 0;
        public bool unline = true;
        public Color unlineColor = Color.green;
        public bool fromAutoTask = false;
        public void Add(string key,string value)
        {
            if (!mSplits.ContainsKey(key)) {
                mSplits.Add(key, value);
                return;
            }
            mSplits[key] = value;
        }
        public bool Execute(int index = 0)
        {
            if (mEvents.Count < 1) return false;
            return RichTextMgr.Inst.ExecuteEvent(mEvents[index], this);
        }
    }
    public class ImgInfo
    {
        public float width;
        public float height;
        public int end;
        public int index;
        public int cacheCnt;
        public Sprite sprite;
        public string spriteName;
        public string folderName;  //没有在icon表中配置的,直接配置图片名,需配置文件夹路径
        public bool IsFace;
        public float scale; //缩放图片的同时,二次缩放了图片在文本钟的占位大小,查看函数InverseToRichText
        public HrefInfo href = null;
    }
    private List m_ImgInfoList;
    public List GetImgList()
    {
        return m_ImgInfoList;
    }
    private List m_HrefInfoList;
    public List GetHrefList()
    {
        return m_HrefInfoList;
    }
    #region 富文本事件
    private static Dictionary m_RichEvents = new Dictionary();
    public void RegisterEvent(RichTextEventEnum type,TRichTextEvent evt)
    {
        if (!m_RichEvents.ContainsKey(type)) {
            m_RichEvents.Add(type, evt);
        }
    }
    public bool ExecuteEvent(RichTextEventEnum type,HrefInfo href)
    {
        return m_RichEvents[type].Execute(type,href);
    }
    public string GetDisplay(RichTextEventEnum type,Dictionary dic)
    {
        return m_RichEvents[type].GetDisplay(type, dic);
    }
    #endregion
}