using System.Collections;
using System.Collections.Specialized;
using System.Text;

namespace TweetDuck.Management.Analytics {
	sealed class AnalyticsReport : IEnumerable {
		private OrderedDictionary data = new OrderedDictionary(32);
		private int separators;

		public void Add(int ignored) { // adding separators to pretty print
			data.Add((++separators).ToString(), null);
		}

		public void Add(string key, string value) {
			data.Add(key, value);
		}

		public AnalyticsReport FinalizeReport() {
			if (!data.IsReadOnly) {
				data = data.AsReadOnly();
			}

			return this;
		}

		public IEnumerator GetEnumerator() {
			return data.GetEnumerator();
		}

		public NameValueCollection ToNameValueCollection() {
			NameValueCollection collection = new NameValueCollection();

			foreach (DictionaryEntry entry in data) {
				if (entry.Value != null) {
					collection.Add(((string) entry.Key).ToLower().Replace(' ', '_'), (string) entry.Value);
				}
			}

			return collection;
		}

		public override string ToString() {
			StringBuilder build = new StringBuilder(625);

			foreach (DictionaryEntry entry in data) {
				if (entry.Value == null) {
					build.AppendLine();
				}
				else {
					build.AppendLine(entry.Key + ": " + entry.Value);
				}
			}

			return build.ToString();
		}
	}
}