using System.Collections.Generic;
using System.Linq;

namespace AppsheetEpplus;

public class IfErrorFunctionCompiler : FunctionCompiler {
  public IfErrorFunctionCompiler(ExcelFunction function)
      : base(function) {
    Require.That(function).Named("function").IsNotNull();
  }

  public override CompileResult Compile(IEnumerable<Expression> children, ParsingContext context) {
    if (children.Count() != 2) {
      throw new ExcelErrorValueException(eErrorType.Value);
    }
    var args = new List<FunctionArgument>();
    Function.BeforeInvoke(context);
    var firstChild = children.First();
    var lastChild = children.ElementAt(1);
    try {
      var result = firstChild.Compile();
      if (result.DataType == DataType.ExcelError) {
        args.Add(new(lastChild.Compile().Result));
      } else {
        args.Add(new(result.Result));
      }
    } catch (ExcelErrorValueException) {
      args.Add(new(lastChild.Compile().Result));
    }
    return Function.Execute(args, context);
  }
}
