using System.Linq;
using System.Text.RegularExpressions;
using Base.Utils;

namespace Base{
    public sealed class Command{
        private static readonly Regex RegexBalancedBrackets = new Regex(RegexUtils.Balance(@"\[", @"\]"), RegexOptions.Compiled);
        private static readonly Regex RegexBalancedParentheses = new Regex(RegexUtils.Balance(@"\(", @"\)"), RegexOptions.Compiled);

        public string Text { get; private set; }

        public string PotentialAppName{
            get{
               int firstSpace = Text.IndexOf(' ');

                if (firstSpace == -1){
                    return null;
                }

                string firstToken = Text.Substring(0, firstSpace);

                if (!firstToken.All(char.IsLetter)){
                    return null;
                }

                return firstToken;
            }
        }

        public bool IsSingleToken{
            get{
                return Text.IndexOf(' ') == -1;
            }
        }

        public Command(string text){
            this.Text = text;
        }

        public Command ReplaceBrackets(MatchEvaluator evaluator){
            return new Command(RegexBalancedParentheses.Replace(RegexBalancedBrackets.Replace(Text, evaluator), evaluator));
        }
    }
}