﻿using System;
using System.Collections.Generic;

namespace AppsheetEpplus;

public class IsoWeekNum : ExcelFunction {
  public override CompileResult Execute(
      IEnumerable<FunctionArgument> arguments,
      ParsingContext context) {
    ValidateArguments(arguments, 1);
    var dateInt = ArgToInt(arguments, 0);
    var date = System.DateTime.FromOADate(dateInt);
    return CreateResult(WeekNumber(date), DataType.Integer);
  }

  /// <summary>
  /// This implementation was found on http://stackoverflow.com/questions/1285191/get-week-of-date-from-linq-query
  /// </summary>
  /// <param name="fromDate"></param>
  /// <returns></returns>
  private int WeekNumber(System.DateTime fromDate) {
    // Get jan 1st of the year
    var startOfYear = fromDate.AddDays(-fromDate.Day + 1).AddMonths(-fromDate.Month + 1);
    // Get dec 31st of the year
    var endOfYear = startOfYear.AddYears(1).AddDays(-1);
    // ISO 8601 weeks start with Monday
    // The first week of a year includes the first Thursday
    // DayOfWeek returns 0 for sunday up to 6 for saterday
    int[] iso8601Correction = [6, 7, 8, 9, 10, 4, 5];
    int nds = fromDate.Subtract(startOfYear).Days + iso8601Correction[(int)startOfYear.DayOfWeek];
    int wk = nds / 7;
    switch (wk) {
      case 0:
        // Return weeknumber of dec 31st of the previous year
        return WeekNumber(startOfYear.AddDays(-1));
      case 53:
        // If dec 31st falls before thursday it is week 01 of next year
        if (endOfYear.DayOfWeek < DayOfWeek.Thursday) {
          return 1;
        }
        return wk;
      default:
        return wk;
    }
  }
}
