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

namespace Elwig.Documents {
    public class DeliveryConfirmation : BusinessDocument {

        public int Year;
        public IEnumerable<DeliveryPart> Deliveries;

        public DeliveryConfirmation(AppDbContext ctx, int year, Member m) :
            base($"Anlieferungsbestätigung {year} – {((IAddress?)m.BillingAddress ?? m).Name}", m) {
            Year = year;
            ShowDateAndLocation = true;
            UseBillingAddress = true;
            // FIXME footer in merged documents
            //DocumentId = $"Anl.-Best. {Year}/{m.MgNr}";
            Deliveries = ctx.DeliveryParts.FromSqlRaw($"""
                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) = ({Year}, {m.MgNr})
                ORDER BY v.sortid, v.abgewertet ASC,
                         COALESCE(LENGTH(v.attributes), 0) ASC, attribute_prio DESC, COALESCE(v.attributes, '~'),
                         v.kmw DESC, v.lsnr, v.dpnr
                """)
                .ToList();
        }
    }
}