﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

namespace AppsheetEpplus;

public class NetworkdaysIntl : ExcelFunction {
  public override CompileResult Execute(
      IEnumerable<FunctionArgument> arguments,
      ParsingContext context) {
    var functionArguments = arguments as FunctionArgument[] ?? arguments.ToArray();
    ValidateArguments(functionArguments, 2);
    var startDate = System.DateTime.FromOADate(ArgToInt(functionArguments, 0));
    var endDate = System.DateTime.FromOADate(ArgToInt(functionArguments, 1));
    WorkdayCalculator calculator = new WorkdayCalculator();
    var weekdayFactory = new HolidayWeekdaysFactory();
    if (functionArguments.Length > 2) {
      var holidayArg = functionArguments[2].Value;
      if (Regex.IsMatch(holidayArg.ToString(), "^[01]{7}")) {
        calculator = new(weekdayFactory.Create(holidayArg.ToString()));
      } else if (IsNumeric(holidayArg)) {
        var holidayCode = Convert.ToInt32(holidayArg);
        calculator = new(weekdayFactory.Create(holidayCode));
      } else {
        return new(eErrorType.Value);
      }
    }
    var result = calculator.CalculateNumberOfWorkdays(startDate, endDate);
    if (functionArguments.Length > 3) {
      result = calculator.ReduceWorkdaysWithHolidays(result, functionArguments[3]);
    }
    return new(result.NumberOfWorkdays, DataType.Integer);
  }
}
