using Elwig.Documents;
using Elwig.Helpers;

namespace Tests.UnitTests.DocumentTests {
    [TestFixture]
    public class DeliveryNoteTest {

        [Test]
        public async Task Test_01_OneDeliveryPart() {
            using var ctx = new AppDbContext();
            var d = await ctx.Deliveries.FindAsync(2020, 1);
            using var doc = new DeliveryNote(d!, ctx);
            var text = await Utils.GeneratePdfText(doc);
            Assert.Multiple(() => {
                Assert.That(text, Contains.Substring("""
                    MUSTERMANN Max
                    Winzerstraße 1
                    2223 Hohenruppersdorf
                    """));
                Assert.That(text, Contains.Substring("0123463"));  // Betriebsnummer
                Assert.That(text, Contains.Substring("pauschaliert"));
                Assert.That(text, Contains.Substring($"Wolkersdorf, am {Elwig.Helpers.Utils.Today:dd.MM.yyyy}"));
                Assert.That(text, Contains.Substring("Traubenübernahmeschein Nr. 20201001X001"));
                Assert.That(text, Contains.Substring("Das Mitglied erklärt, dass die gelieferte Ware dem österreichischen Weingesetz entspricht"));
                Assert.That(text, Contains.Substring("""
                    1 Grüner Veltliner Qualitätswein 73 15,0 3 219
                    Herkunft: Österreich / Weinland / Niederösterreich
                    / Matzner Hügel / Hohenruppersdorf / KG Hohenruppersdorf
                    Waage: 1, ID: 321 – 09:02, 01.10.2020
                    Brutto: 3 219 kg – Tara: 0 kg – Netto: 3 219 kg – gerebelt gewogen
                    """));
            });
        }

        [Test]
        public async Task Test_02_TwoDeliveryParts() {
            using var ctx = new AppDbContext();
            var d = await ctx.Deliveries.FindAsync(2020, 4);
            using var doc = new DeliveryNote(d!, ctx);
            var text = await Utils.GeneratePdfText(doc);
            Assert.Multiple(() => {
                Assert.That(text, Contains.Substring("""
                    W&B Weinbauer GesbR
                    WEINBAUER Wernhardt
                    Winzerstraße 2
                    2223 Hohenruppersdorf
                    """));
                Assert.That(text, Contains.Substring("0123471"));  // Betriebsnummer
                Assert.That(text, Contains.Substring("pauschaliert"));
                Assert.That(text, Contains.Substring($"Wolkersdorf, am {Elwig.Helpers.Utils.Today:dd.MM.yyyy}"));
                Assert.That(text, Contains.Substring("Traubenübernahmeschein Nr. 20201001X004"));
                Assert.That(text, Contains.Substring("Das Mitglied erklärt, dass die gelieferte Ware dem österreichischen Weingesetz entspricht"));
                Assert.That(text, Contains.Substring("""
                    1 Grüner Veltliner Qualitätswein 82 16,7 4 002
                    Herkunft: Österreich / Weinland / Niederösterreich
                    / Matzner Hügel / Hohenruppersdorf / KG Hohenruppersdorf
                    Waage: ?, ID: ? (gerebelt gewogen)
                    """));
                Assert.That(text, Contains.Substring("""
                    2 Grüner Veltliner Qualitätswein 75 15,3 481
                    Herkunft: Österreich / Weinland / Niederösterreich
                    / Matzner Hügel / Hohenruppersdorf / KG Hohenruppersdorf
                    Waage: ?, ID: ? (gerebelt gewogen)
                    """));
                Assert.That(text, Contains.Substring("Gesamt: 81 16,5 4 483"));
            });
        }

        [Test]
        public async Task Test_03_DeliveryPartsWithAttribute() {
            using var ctx = new AppDbContext();
            var d = await ctx.Deliveries.FindAsync(2020, 3);
            using var doc = new DeliveryNote(d!, ctx);
            var text = await Utils.GeneratePdfText(doc);
            Assert.Multiple(() => {
                Assert.That(text, Contains.Substring("""
                    MUSTERMANN Max
                    Winzerstraße 1
                    2223 Hohenruppersdorf
                    """));
                Assert.That(text, Contains.Substring("0123463"));  // Betriebsnummer
                Assert.That(text, Contains.Substring("pauschaliert"));
                Assert.That(text, Contains.Substring($"Wolkersdorf, am {Elwig.Helpers.Utils.Today:dd.MM.yyyy}"));
                Assert.That(text, Contains.Substring("Traubenübernahmeschein Nr. 20201001X003"));
                Assert.That(text, Contains.Substring("Das Mitglied erklärt, dass die gelieferte Ware dem österreichischen Weingesetz entspricht"));
                Assert.That(text, Contains.Substring("""
                    1 Grüner Veltliner Wein 75 15,4 2 561
                    Herkunft: Österreich
                    / Matzner Hügel / Hohenruppersdorf / KG Hohenruppersdorf
                    Waage: ?, ID: ? (gerebelt gewogen)
                    """));
                Assert.That(text, Contains.Substring("""
                    2 Grüner Veltliner Kabinett Wein 87 17,6 3 129
                    Herkunft: Österreich
                    / Matzner Hügel / Hohenruppersdorf / KG Hohenruppersdorf
                    Waage: ?, ID: ? (gerebelt gewogen)
                    """));
                Assert.That(text, Contains.Substring("""
                    3 Grüner Veltliner Wein 79 16,1 1 280
                    Herkunft: Österreich
                    / Matzner Hügel / Hohenruppersdorf / KG Hohenruppersdorf
                    Waage: ?, ID: ? (gerebelt gewogen)
                    """));
                Assert.That(text, Contains.Substring("Gesamt: 81 16,5 6 970"));
            });
        }

        [Test]
        public async Task Test_04_DeliveryPartsWithCultivation() {
            using var ctx = new AppDbContext();
            var d = await ctx.Deliveries.FindAsync(2020, 7);
            using var doc = new DeliveryNote(d!, ctx);
            var text = await Utils.GeneratePdfText(doc);
            Assert.Multiple(() => {
                Assert.That(text, Contains.Substring("""
                    MUSTERBAUER Matthäus
                    Brünner Straße 10
                    2120 Wolkersdorf im Weinviertel
                    """));
                Assert.That(text, Contains.Substring("0123480"));  // Betriebsnummer
                Assert.That(text, Contains.Substring("pauschaliert"));
                Assert.That(text, Contains.Substring($"Wolkersdorf, am {Elwig.Helpers.Utils.Today:dd.MM.yyyy}"));
                Assert.That(text, Contains.Substring("Traubenübernahmeschein Nr. 20201002X001"));
                Assert.That(text, Contains.Substring("Das Mitglied erklärt, dass die gelieferte Ware dem österreichischen Weingesetz entspricht"));
                Assert.That(text, Contains.Substring("""
                    1 Grüner Veltliner Wein 80 16,3 3 198
                    Bewirtschaftung: Bio (AT-BIO-302)
                    Herkunft: Österreich
                    / Wolkersdorfer Hochleithen / Wolkersdorf im Weinviertel / KG Wolkersdorf
                    Waage: ?, ID: ? (gerebelt gewogen)
                    """));
                Assert.That(text, Contains.Substring("""
                    2 Grüner Veltliner Qualitätswein 75 15,4 2 134
                    Bewirtschaftung: Bio (AT-BIO-302)
                    Herkunft: Österreich / Weinland / Niederösterreich
                    / Wolkersdorfer Hochleithen / Wolkersdorf im Weinviertel / KG Wolkersdorf
                    Waage: ?, ID: ? (gerebelt gewogen)
                    """));
                Assert.That(text, Contains.Substring("Gesamt: 78 15,9 5 332"));
            });
        }
    }
}
