﻿using System;
using System.IO;
using System.Linq;
using System.Text;
using FluentAssertions;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OfficeOpenXml;

namespace NetCoreTests;

[TestClass]
public class TimeTest
{
    static TimeTest()
    {
        Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    }
    
    [TestMethod]
    public void TestIncorrectDurationFromOADate()
    {
        ExcelWorksheet.IncorrectDurationFromOADate(2.75).Should().Be(new(1900, 1, 1, 18, 0, 0));
        ExcelWorksheet.IncorrectDurationFromOADate(1.75).Should().Be(new(1899, 12, 31, 18, 0, 0));
        ExcelWorksheet.IncorrectDurationFromOADate(0.75).Should().Be(new(1899, 12, 30, 18, 0, 0));
        ExcelWorksheet.IncorrectDurationFromOADate(0.5).Should().Be(new(1899, 12, 30, 12, 0, 0));
        ExcelWorksheet.IncorrectDurationFromOADate(0.25).Should().Be(new(1899, 12, 30, 6, 0, 0));

        ExcelWorksheet.IncorrectDurationFromOADate(0).Should().Be(new(1899, 12, 30, 0, 0, 0));
        
        ExcelWorksheet.IncorrectDurationFromOADate(-0.25).Should().Be(new(1899, 12, 29, 18, 0, 0));
        ExcelWorksheet.IncorrectDurationFromOADate(-0.5).Should().Be(new(1899, 12, 29, 12, 0, 0));
        ExcelWorksheet.IncorrectDurationFromOADate(-0.75).Should().Be(new(1899, 12, 29, 6, 0, 0));
        ExcelWorksheet.IncorrectDurationFromOADate(-1.75).Should().Be(new(1899, 12, 28, 6, 0, 0));
        ExcelWorksheet.IncorrectDurationFromOADate(-2.75).Should().Be(new(1899, 12, 27, 6, 0, 0));
    }

    [TestMethod]
    public void TestDateParse()
    {
        using var package = new ExcelPackage(new FileInfo(GetTestWorkbookPath("Times.xlsx")));
        var sheet = package.Workbook.Worksheets.First();

        sheet.Cells["B3"].Value.Should().Be(new DateTime(1899, 12, 30, 3, 15, 30));
        sheet.Cells["C3"].Value.Should().Be(new DateTime(1899, 12, 30, 3, 15, 0));
        sheet.Cells["D3"].Value.Should().Be(0.13541666666666666);
        sheet.Cells["E3"].Value.Should().Be(new DateTime(1899, 12, 30, 3, 15, 30));
        sheet.Cells["F3"].Value.Should().Be(0.13576388888888888);
        sheet.Cells["G3"].Value.Should().Be(0.13541666666666666);
        sheet.Cells["H3"].Value.Should().Be(new DateTime(1899, 12, 30, 3, 15, 30));
        
        sheet.Cells["B7"].Value.Should().Be(new DateTime(1899, 12, 30, 23, 59, 59));
        sheet.Cells["C7"].Value.Should().Be(new DateTime(1899, 12, 30, 23, 59, 0));
        sheet.Cells["D7"].Value.Should().Be(0.9993055555555556);
        sheet.Cells["E7"].Value.Should().Be(new DateTime(1899, 12, 30, 23, 59, 59));
        sheet.Cells["F7"].Value.Should().Be(0.999988425925926);
        sheet.Cells["G7"].Value.Should().Be(0.9993055555555556);
        sheet.Cells["H7"].Value.Should().Be(new DateTime(1899, 12, 30, 23, 59, 59));
    }

    private static string GetTestWorkbookPath(string filename)
    {
        var assemblyPath = Path.GetDirectoryName(typeof(TimeTest).Assembly.Location)!;
        return Path.Combine(assemblyPath, "TestWorkbooks", filename);
    }
}
