@using WebfrontCore.ViewModels
@using System.Globalization
@using SharedLibraryCore.Database.Models
@model WebfrontCore.ViewModels.ScoreboardInfo
@{
    Layout = null;

    object OrderByFunc(ClientScoreboardInfo item)
    {
        var property = typeof(ClientScoreboardInfo).GetProperties().FirstOrDefault(prop =>
            prop.CanRead && prop.Name.Equals(Model.OrderByKey, StringComparison.InvariantCultureIgnoreCase));

        return property != null ? property.GetValue(item) : item.Score;
    }

    string GetColumnSortDisplay(string propertyName)
    {
        if (propertyName == (Model.OrderByKey ?? nameof(ClientScoreboardInfo.Score)))
        {
            return Model.ShouldOrderDescending ? "<span class=\"ml-5 font-size-12\">▼</span>" : "<span class=\"ml-5 font-size-12\">▲</span>";
        }

        return null;
    }

    string GetTeamBackgroundColorClass(ClientScoreboardInfo client)
    {
        return $"team-{client.Team.ToString().ToLower()}-bg {(client.Team == EFClient.TeamType.Unknown ? "bg-dark-dm bg-light-lm" : "")}";
    }
}

<h4 class="content-title mb-0">
    @ViewBag.Localization["WEBFRONT_TITLE_SCOREBOARD"]
</h4>
<span class="text-muted">
    <color-code value="@Model.ServerName"></color-code>
</span>

@if (!Model.ClientInfo.Any())
{
    <div class="mt-20">@ViewBag.Localization["WEBFRONT_SCOREBOARD_NO_PLAYERS"]</div>
}
else
{
    <table class="table table-sort mt-15"
           data-sort-column="@(Model.OrderByKey ?? nameof(ClientScoreboardInfo.Score))"
           data-sort-down="@Model.ShouldOrderDescending.ToString().ToLower()">
        <tr class="bg-dark-dm bg-white-lm d-none d-lg-table-row">
            <th class="table-sort-column" data-column-name="@nameof(ClientScoreboardInfo.ClientName)">@ViewBag.Localization["WEBFRONT_SCOREBOARD_TABLE_PLAYER"]@Html.Raw(GetColumnSortDisplay(nameof(ClientScoreboardInfo.ClientName)))</th>
            <th class="table-sort-column" data-column-name="@nameof(ClientScoreboardInfo.Score)">@ViewBag.Localization["WEBFRONT_ADV_STATS_SCORE"]@Html.Raw(GetColumnSortDisplay(nameof(ClientScoreboardInfo.Score)))</th>
            <th class="table-sort-column" data-column-name="@nameof(ClientScoreboardInfo.Kills)">@ViewBag.Localization["WEBFRONT_ADV_STATS_KILLS"]@Html.Raw(GetColumnSortDisplay(nameof(ClientScoreboardInfo.Kills)))</th>
            <th class="table-sort-column" data-column-name="@nameof(ClientScoreboardInfo.Deaths)">@ViewBag.Localization["WEBFRONT_SCOREBOARD_TABLE_DEATHS"]@Html.Raw(GetColumnSortDisplay(nameof(ClientScoreboardInfo.Deaths)))</th>
            <th class="table-sort-column" data-column-name="@nameof(ClientScoreboardInfo.Kdr)">@ViewBag.Localization["WEBFRONT_SCOREBOARD_TABLE_RATIO"]@Html.Raw(GetColumnSortDisplay(nameof(ClientScoreboardInfo.Kdr)))</th>
            <th class="table-sort-column" data-column-name="@nameof(ClientScoreboardInfo.ScorePerMinute)">@ViewBag.Localization["WEBFRONT_SCOREBOARD_TABLE_SPM"]@Html.Raw(GetColumnSortDisplay(nameof(ClientScoreboardInfo.ScorePerMinute)))</th>
            <th class="table-sort-column" data-column-name="@nameof(ClientScoreboardInfo.ZScore)">@ViewBag.Localization["WEBFRONT_ADV_STATS_ZSCORE"]@Html.Raw(GetColumnSortDisplay(nameof(ClientScoreboardInfo.ZScore)))</th>
            <th class="text-right table-sort-column" data-column-name="@nameof(ClientScoreboardInfo.Ping)">@ViewBag.Localization["WEBFRONT_SCOREBOARD_TABLE_PING"]@Html.Raw(GetColumnSortDisplay(nameof(ClientScoreboardInfo.Ping)))</th>
        </tr>
        @foreach (var client in Model.ShouldOrderDescending ? Model.ClientInfo.OrderByDescending(OrderByFunc) : Model.ClientInfo.OrderBy(OrderByFunc))
        {
            <!-- desktop -->
            <tr class="@GetTeamBackgroundColorClass(client) d-none d-lg-table-row">
                <td>
                    <a asp-controller="Client" asp-action="Profile" asp-route-id="@client.ClientId" class="no-decoration text-light-dm text-dark-lm">
                        <color-code value="@client.ClientName"></color-code>
                    </a>
                </td>
                <td>@client.Score</td>
                <td>@(client.Kills ?? 0)</td>
                <td>@(client.Deaths ?? 0)</td>
                <td>@Math.Round(client.Kdr ?? 0, 2)</td>
                <td>@Math.Round(client.ScorePerMinute ?? 0)</td>
                <td>@(client.ZScore is null or 0 ? "--" : Math.Round(client.ZScore.Value, 2).ToString(CultureInfo.CurrentCulture))</td>
                <td class="text-right">@client.Ping</td>
            </tr>

            <tr class="d-table-row d-lg-none d-flex">
                <td class="text-right bg-primary text-light flex-grow-0">
                    <div>@ViewBag.Localization["WEBFRONT_SCOREBOARD_TABLE_PLAYER"]</div>
                    <div>@ViewBag.Localization["WEBFRONT_ADV_STATS_SCORE"]</div>
                    <div>@ViewBag.Localization["WEBFRONT_ADV_STATS_KILLS"]</div>
                    <div>@ViewBag.Localization["WEBFRONT_SCOREBOARD_TABLE_DEATHS"]</div>
                    <div>@ViewBag.Localization["WEBFRONT_SCOREBOARD_TABLE_RATIO"]</div>
                    <div>@ViewBag.Localization["WEBFRONT_SCOREBOARD_TABLE_SPM"]</div>
                    <div>@ViewBag.Localization["WEBFRONT_ADV_STATS_ZSCORE"]</div>
                    <div>@ViewBag.Localization["WEBFRONT_SCOREBOARD_TABLE_PING"]</div>
                </td>

                <td class="@GetTeamBackgroundColorClass(client) flex-fill">
                    <a asp-controller="Client" asp-action="Profile" asp-route-id="@client.ClientId" class="no-decoration text-light-dm text-dark-lm">
                        <color-code value="@client.ClientName"></color-code>
                    </a>
                    <div>@client.Score</div>
                    <div>@(client.Kills ?? 0)</div>
                    <div>@(client.Deaths ?? 0)</div>
                    <div>@Math.Round(client.Kdr ?? 0, 2)</div>
                    <div>@Math.Round(client.ScorePerMinute ?? 0)</div>
                    <div>@(client.ZScore is null or 0 ? "--" : Math.Round(client.ZScore.Value, 2).ToString(CultureInfo.CurrentCulture))</div>
                    <div>@client.Ping</div>
                </td>
            </tr>
        }
    </table>
}
