using Microsoft.AspNetCore.Mvc; using SharedLibraryCore; using SharedLibraryCore.Database.Models; using SharedLibraryCore.Dtos; using SharedLibraryCore.Objects; using System; using System.Linq; using System.Threading.Tasks; namespace WebfrontCore.ViewComponents { public class PenaltyListViewComponent : ViewComponent { public async Task InvokeAsync(int offset, Penalty.PenaltyType showOnly) { string showEvadeString(EFPenalty penalty) => penalty.IsEvadedOffense == true ? $"({Utilities.CurrentLocalization.LocalizationIndex["WEBFRONT_PENALTY_EVADE"]}) " : ""; var penalties = await Program.Manager.GetPenaltyService().GetRecentPenalties(12, offset, showOnly); var penaltiesDto = penalties.Select(p => new PenaltyInfo() { Id = p.PenaltyId, OffenderId = p.OffenderId, OffenderName = p.Offender.Name, PunisherId = p.PunisherId, PunisherName = p.Punisher.Name, PunisherLevel = p.Punisher.Level.ToLocalizedLevelName(), PunisherLevelId = (int)p.Punisher.Level, #if DEBUG Offense = !string.IsNullOrEmpty(p.AutomatedOffense) ? p.AutomatedOffense : p.Offense, #else Offense = (User.Identity.IsAuthenticated && !string.IsNullOrEmpty(p.AutomatedOffense)) ? $"{showEvadeString(p)}{p.AutomatedOffense}" : $"{showEvadeString(p)}{p.Offense}", #endif PenaltyType = p.Type.ToString(), TimePunished = Utilities.GetTimePassed(p.When, false), // show time passed if ban TimeRemaining = DateTime.UtcNow > p.Expires ? "" : $"{((p.Expires ?? DateTime.MaxValue).Year == DateTime.MaxValue.Year ? Utilities.GetTimePassed(p.When, true) : Utilities.TimeSpanText((p.Expires ?? DateTime.MaxValue) - DateTime.UtcNow))}", Sensitive = p.Type == Penalty.PenaltyType.Flag, AutomatedOffense = p.AutomatedOffense }); #if DEBUG penaltiesDto = penaltiesDto.ToList(); #else penaltiesDto = User.Identity.IsAuthenticated ? penaltiesDto.ToList() : penaltiesDto.Where(p => !p.Sensitive).ToList(); #endif return View("_List", penaltiesDto); } } }