@model UsersModel
@inject Bit.Core.Services.IUserService userService
@inject Bit.Core.Services.IFeatureService featureService
@{
    ViewData["Title"] = "Users";
}

<h1>Users</h1>

<form class="form-inline mb-2" method="get">
    <label class="sr-only" asp-for="Email">Email</label>
    <input type="text" class="form-control mb-2 mr-2" placeholder="Email" asp-for="Email" name="email">
    <button type="submit" class="btn btn-primary mb-2" title="Search"><i class="fa fa-search"></i> Search</button>
</form>

<div class="table-responsive">
    <table class="table table-striped table-hover">
        <thead>
            <tr>
                <th>Email</th>
                <th style="width: 150px;">Created</th>
                <th style="width: 170px; min-width: 170px;">Details</th>
            </tr>
        </thead>
        <tbody>
            @if(!Model.Items.Any())
            {
                <tr>
                    <td colspan="4">No results to list.</td>
                </tr>
            }
            else
            {
                @foreach(var user in Model.Items)
                {
                    <tr>
                        <td>
                            <a asp-action="@Model.Action" asp-route-id="@user.Id">@user.Email</a>
                        </td>
                        <td>
                            <span title="@user.CreationDate.ToString()">
                                @user.CreationDate.ToShortDateString()
                            </span>
                        </td>
                        <td>
                            @if(user.Premium)
                            {
                                <i class="fa fa-star fa-lg fa-fw"
                                   title="Premium, expires @(user.PremiumExpirationDate?.ToShortDateString() ?? "-")"></i>
                            }
                            else
                            {
                                <i class="fa fa-star-o fa-lg fa-fw text-muted" title="Not Premium"></i>
                            }
                            @if(user.MaxStorageGb.HasValue && user.MaxStorageGb > 1)
                            {
                                <i class="fa fa-plus-square fa-lg fa-fw"
                                   title="Additional Storage, @(user.MaxStorageGb - 1) GB"></i>
                            }
                            else
                            {
                                <i class="fa fa-plus-square-o fa-lg fa-fw text-muted"
                                   title="No Additional Storage"></i>
                            }
                            @if(user.EmailVerified)
                            {
                                <i class="fa fa-check-circle fa-lg fa-fw" title="Email Verified"></i>
                            }
                            else
                            {
                                <i class="fa fa-times-circle-o fa-lg fa-fw text-muted" title="Email Not Verified"></i>
                            }
                            @if (featureService.IsEnabled(Bit.Core.FeatureFlagKeys.MembersTwoFAQueryOptimization))
                            {
                                var usersTwoFactorIsEnabled = TempData["UsersTwoFactorIsEnabled"] as IEnumerable<(Guid userId, bool twoFactorIsEnabled)>;
                                @if(usersTwoFactorIsEnabled.FirstOrDefault(tuple => tuple.userId == user.Id).twoFactorIsEnabled)
                                {
                                    <i class="fa fa-lock fa-lg fa-fw" title="2FA Enabled"></i>
                                }
                                else
                                {
                                    <i class="fa fa-unlock fa-lg fa-fw text-muted" title="2FA Not Enabled"></i>
                                }
                            }
                            else
                            {
                                @if(await userService.TwoFactorIsEnabledAsync(user))
                                {
                                    <i class="fa fa-lock fa-lg fa-fw" title="2FA Enabled"></i>
                                }
                                else
                                {
                                    <i class="fa fa-unlock fa-lg fa-fw text-muted" title="2FA Not Enabled"></i>
                                }
                            }
                        </td>
                    </tr>
                }
            }
        </tbody>
    </table>
</div>

<nav>
    <ul class="pagination">
        @if(Model.PreviousPage.HasValue)
        {
            <li class="page-item">
                <a class="page-link" asp-action="Index" asp-route-page="@Model.PreviousPage.Value"
                   asp-route-count="@Model.Count" asp-route-email="@Model.Email">Previous</a>
            </li>
        }
        else
        {
            <li class="page-item disabled">
                <a class="page-link" href="#" tabindex="-1">Previous</a>
            </li>
        }
        @if(Model.NextPage.HasValue)
        {
            <li class="page-item">
                <a class="page-link" asp-action="Index" asp-route-page="@Model.NextPage.Value"
                   asp-route-count="@Model.Count" asp-route-email="@Model.Email">Next</a>
            </li>
        }
        else
        {
            <li class="page-item disabled">
                <a class="page-link" href="#" tabindex="-1">Next</a>
            </li>
        }
    </ul>
</nav>
