Code/Functions/String/PadRightFunction.cs
using Expressive.Expressions;
using System;

namespace Expressive.Functions.String
{
    internal class PadRightFunction : FunctionBase
    {
        #region FunctionBase Members

        public override string Name
        {
            get
            {
                return "PadRight";
            }
        }

        public override object Evaluate(IExpression[] parameters, Context context)
        {
            this.ValidateParameterCount(parameters, 3, 3);

            object value = parameters[0].Evaluate(Variables);
            object length = parameters[1].Evaluate(Variables);

            if (value is null || length is null) { return null; }

            string text = null;
            if (value is string)
            {
                text = (string)value;
            }
            else
            {
                text = value.ToString();
            }

            int totalLength = Convert.ToInt32(length);

            var third = parameters[2].Evaluate(Variables);
            char character = ' ';

            if (third is char)
            {
                character = (char)third;
            }
            else if (third is string)
            {
                character = (char)((string)third)[0];
            }

            return text.PadRight(totalLength, character);
        }

        #endregion
    }
}