using System;
using System.Collections.Generic;
using System.Text;

namespace Apewer.Internals
{

    internal class TextBuilder
    {

        private StringBuilder _sb = null;
        private string _value = null;

        /// <summary>获取或设置字符串内容。</summary>
        public string Value
        {
            get
            {
                if (_value == null) _value = _sb.ToString();
                return _value;
            }
            set { Clear(); Append(value); }
        }

        /// <summary>追加内容。</summary>
        public void Append(string argStrings)
        {
            if (string.IsNullOrEmpty(argStrings)) return;
            _value = null;
            _sb.Append(argStrings);
        }

        /// <summary>追加内容。</summary>
        public void Append(IEnumerable<string> argStrings)
        {
            if (argStrings == null) return;
            _value = null;
            foreach (var vstring in argStrings) if (!string.IsNullOrEmpty(vstring)) _sb.Append(vstring);

        }

        /// <summary>追加内容。</summary>
        public void Append(params string[] argText)
        {
            _value = null;
            foreach (var vtext in argText) if (!string.IsNullOrEmpty(vtext)) _sb.Append(vtext);
        }

        /// <summary>追加内容。</summary>
        public void Append(char argChar)
        {
            _value = null;
            _sb.Append(argChar.ToString());
        }

        /// <summary>追加内容。</summary>
        public void Append(IEnumerable<char> argChar)
        {
            if (argChar == null) return;
            _value = null;
            foreach (var vchar in argChar) _sb.Append(vchar.ToString());
        }

        /// <summary>追加内容。</summary>
        public void Append(params char[] argChar)
        {
            _value = null;
            foreach (var vchar in argChar) _sb.Append(vchar.ToString());
        }

        /// <summary>清空内容,重建对象。</summary>
        public void Clear()
        {
            _value = null;
            _sb = new StringBuilder();
        }

        /// <summary>内容长度。</summary>
        public int Length
        {
            get { return _sb.Length; }
        }

        /// <summary>替换内容子中的字符串。</summary>
        public void Replace(string argOld, string argNew)
        {
            if (!string.IsNullOrEmpty(argOld))
            {
                _value = null;
                var vnew = string.IsNullOrEmpty(argNew) ? "" : argNew;
                _sb.Replace(argOld, vnew);
            }
        }

        /// <summary>获取字符串内容。</summary>
        public override string ToString()
        {
            if (_value == null) _value = _sb.ToString();
            return _value;
        }

        /// <summary>构造函数。</summary>
        public TextBuilder()
        {
            _sb = new StringBuilder();
        }

        /// <summary>构造函数。</summary>
        public TextBuilder(string argContent)
        {
            _sb = new StringBuilder();
            if (string.IsNullOrEmpty(argContent)) return;
            _sb.Append(argContent);
        }

    }

}