using Elwig.Helpers;
using Elwig.Models;
using Microsoft.EntityFrameworkCore;
using System.Collections.Generic;
using System.Linq;

namespace Elwig.Documents {
    public class CreditNote : BusinessDocument {

        public Credit Credit;
        public string? Text;
        public string CurrencySymbol;
        public string[] BucketNames;
        public int Precision;
        public IEnumerable<DeliveryPart> Parts;

        public CreditNote(Credit c, AppDbContext ctx) : base($"Traubengutschrift Nr. {c.TgId} – {c.Payment.Variant.Name}", c.Member) {
            UseBillingAddress = true;
            ShowDateAndLocation = true;
            Credit = c;
            Aside = Aside.Replace("</table>", "") +
                $"<thead><tr><th colspan='2'>Gutschrift</th></tr></thead><tbody>" +
                $"<tr><th>TG-Nr.</th><td>{c.TgId}</td></tr>" +
                $"<tr><th>Überw. am</th><td>{c.Payment.Variant.TransferDate:dd.MM.yyyy}</td></tr>" +
                $"<tr><th>Datum/Zeit</th><td>{c.ModifiedTimestamp:dd.MM.yyyy} / {c.ModifiedTimestamp:HH:mm}</td></tr>" +
                $"</tbody></table>";
            Text = App.Client.TextDeliveryNote;
            DocumentId = $"Tr.-Gutschr. {c.TgId}";
            CurrencySymbol = c.Payment.Variant.Season.Currency.Symbol ?? c.Payment.Variant.Season.Currency.Code;
            BucketNames = c.Payment.Variant.BucketNames;
            Precision = c.Payment.Variant.Season.Precision;
            Parts = ctx.DeliveryParts.FromSql($"""
                SELECT p.*
                FROM v_delivery v
                JOIN delivery_part p ON (p.year, p.did, p.dpnr) = (v.year, v.did, v.dpnr)
                WHERE (v.year, v.mgnr) = ({c.Year}, {c.Member.MgNr})
                ORDER BY sortid, LENGTH(attributes) DESC, attributes, kmw DESC, date, time, dpnr
                """).ToList();
        }
    }}