@using RazorLight
@using Elwig.Helpers
@inherits TemplatePage<Elwig.Documents.WineQualityStatistics>
@model Elwig.Documents.WineQualityStatistics
@{ Layout = "Document"; }
<link rel="stylesheet" href="file:///@Raw(Model.DocumentsPath)\WineQualityStatistics.css" />
<main>
    <h1>Qualitätsstatistik</h1>
    <h2>@Model.Filter</h2>
    @foreach (var sec in Model.Data.Sections) {
        <table>
            <colgroup>
                <col style="width: 25%;"/>
                <col style="width: 25%;"/>
                <col style="width: 25%;"/>
                <col style="width: 25%;"/>
            </colgroup>
            <thead>
                <tr>
                    <th colspan="4" class="header @(sec.Type == "R" ? "red" : sec.Type == "W" ? "green" : "")">
                        <h3>@sec.Name</h3>
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    @foreach (var qualIds in Model.QualIds) {
                        <td class="container">
                            <div class="row">
                                <span class="units">[@(Model.UseOe ? "°Oe" : "°KMW")]</span>
                                <span class="units">[#]</span>
                                <span class="units">[kg]</span>
                            </div>
                            @foreach (var qualId in qualIds) {
                                <h4>@(Model.QualityLevels.GetValueOrDefault(qualId, qualId))</h4>
                                @foreach (var (grad, avgKmw, num, weight) in sec.Data.GetValueOrDefault(qualId, Array.Empty<(double, double, int, int)>())) {
                                    <div class="row">
                                        <span class="gradation">@(Model.UseOe ? $"{grad:N0}" : $"{grad:N1}")</span>
                                        <span class="number">@($"{num:N0}")</span>
                                        <span class="number">@($"{weight:N0}")</span>
                                    </div>
                                }
                            }
                        </td>
                    }
                </tr>
                <tr>
                    @foreach (var qualIds in Model.QualIds) {
                        var quals = qualIds.Select(q => sec.Data.GetValueOrDefault(q, Array.Empty<(double Grad, double AvgKmw, int Num, int Weight)>()));
                        var weight = quals.Sum(q => q.Sum(kv => kv.Weight));
                        var num = quals.Sum(q => q.Sum(kv => kv.Num));
                        var kmw = quals.Sum(q => q.Sum(kv => kv.AvgKmw * kv.Weight)) / weight;
                        <td class="container bold">
                            <div class="row">
                                <span class="gradation">@(weight == 0 ? "-" : Model.UseOe ? $"{Utils.KmwToOe(kmw):N0}" : $"{kmw:N1}")</span>
                                <span class="number">@($"{num:N0}")</span>
                                <span class="number">@($"{weight:N0}")</span>
                            </div>
                        </td>
                    }
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    @{
                        var totalWeight = sec.Data.Values.Sum(q => q.Sum(kv => kv.Weight));
                        var totalNum = sec.Data.Values.Sum(q => q.Sum(kv => kv.Num));
                        var totalKmw = sec.Data.Values.Sum(q => q.Sum(kv => kv.AvgKmw * kv.Weight)) / totalWeight;
                    }
                    <td colspan="4" class="container bold footer @(sec.Type == "R" ? "red" : sec.Type == "W" ? "green" : "")">
                        <div class="row" style="width: 24%; margin-left: 76%;">
                            <span class="gradation">@(totalWeight == 0 ? "-" : Model.UseOe ? $"{Utils.KmwToOe(totalKmw):N0}" : $"{totalKmw:N1}")</span>
                            <span class="number">@($"{totalNum:N0}")</span>
                            <span class="number">@($"{totalWeight:N0}")</span>
                        </div>
                    </td>
                </tr>
            </tfoot>
        </table>
    }
</main>