using Elwig.Documents;
using Elwig.Helpers;

namespace Tests.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("1472583"));  // Betriebsnummer
                Assert.That(text, Contains.Substring("pauschaliert"));
                Assert.That(text, Contains.Substring($"Wolkersdorf, am {DateTime.Now:dd.MM.yyyy}"));
                Assert.That(text, Contains.Substring("Traubenübernahmeschein Nr. 20201001X001"));
                Assert.That(text, Contains.Substring("Ich bin der Text, der auf einem Traubenübernahmeschein steht!"));
                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: ?, ID: ? (netto/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("4725836"));  // Betriebsnummer
                Assert.That(text, Contains.Substring("pauschaliert"));
                Assert.That(text, Contains.Substring($"Wolkersdorf, am {DateTime.Now:dd.MM.yyyy}"));
                Assert.That(text, Contains.Substring("Traubenübernahmeschein Nr. 20201001X004"));
                Assert.That(text, Contains.Substring("Ich bin der Text, der auf einem Traubenübernahmeschein steht!"));
                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: ? (netto/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: ? (netto/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("1472583"));  // Betriebsnummer
                Assert.That(text, Contains.Substring("pauschaliert"));
                Assert.That(text, Contains.Substring($"Wolkersdorf, am {DateTime.Now:dd.MM.yyyy}"));
                Assert.That(text, Contains.Substring("Traubenübernahmeschein Nr. 20201001X003"));
                Assert.That(text, Contains.Substring("Ich bin der Text, der auf einem Traubenübernahmeschein steht!"));
                Assert.That(text, Contains.Substring("""
                    1 Grüner Veltliner Qualitätswein 75 15,4 2 561
                    Herkunft: Österreich / Weinland / Niederösterreich
                    / Matzner Hügel / Hohenruppersdorf / KG Hohenruppersdorf
                    Waage: ?, ID: ? (netto/gerebelt gewogen)
                    """));
                Assert.That(text, Contains.Substring("""
                    2 Grüner Veltliner Kabinett Kabinett 87 17,6 3 129
                    Herkunft: Österreich / Weinland / Niederösterreich
                    / Matzner Hügel / Hohenruppersdorf / KG Hohenruppersdorf
                    Waage: ?, ID: ? (netto/gerebelt gewogen)
                    """));
                Assert.That(text, Contains.Substring("""
                    3 Grüner Veltliner Qualitätswein 79 16,1 1 280
                    Herkunft: Österreich / Weinland / Niederösterreich
                    / Matzner Hügel / Hohenruppersdorf / KG Hohenruppersdorf
                    Waage: ?, ID: ? (netto/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("7258369"));  // Betriebsnummer
                Assert.That(text, Contains.Substring("pauschaliert"));
                Assert.That(text, Contains.Substring($"Wolkersdorf, am {DateTime.Now:dd.MM.yyyy}"));
                Assert.That(text, Contains.Substring("Traubenübernahmeschein Nr. 20201002X001"));
                Assert.That(text, Contains.Substring("Ich bin der Text, der auf einem Traubenübernahmeschein steht!"));
                Assert.That(text, Contains.Substring("""
                    1 Grüner Veltliner Qualitätswein 80 16,3 3 198
                    Bewirtschaftung: Bio (AT-BIO-302)
                    Herkunft: Österreich / Weinland / Niederösterreich
                    / Wolkersdorfer Hochleithen / Wolkersdorf im Weinviertel / KG Wolkersdorf
                    Waage: ?, ID: ? (netto/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: ? (netto/gerebelt gewogen)
                    """));
                Assert.That(text, Contains.Substring("Gesamt: 78 15,9 5 332"));
            });
        }
    }
}