using System; using Blazored.LocalStorage; using HeartTrack.Models; using HeartTrack.Services.TicketDataService; using Microsoft.AspNetCore.Components; namespace HeartTrack.Services.TicketDataServiceFactice { public class TicketDataServiceFactice : ITicketDataService { [Inject] private HttpClient _clientHttp { get; set; } [Inject] public ILocalStorageService _localStorage { get; set; } [Inject] public NavigationManager _navigationManager { get; set; } private String EmplacementLocalStorage { get; set; } private String EmplacementJson { get; set; } public TicketDataServiceFactice(HttpClient clientHttp, ILocalStorageService localStorage, NavigationManager navigationManager) { this._clientHttp = clientHttp; this._localStorage = localStorage; this._navigationManager = navigationManager; this.EmplacementLocalStorage = "ticketsData"; this.EmplacementJson = $"{_navigationManager.BaseUri}data/fake-tickets.json"; } public async Task AddTicket(Ticket t) { List data = await getAllTickets(); data.Add(t); await this.SaveAllTickets(data); } public async Task getTicketById(int id) { List tickets = await getAllTickets(); Ticket? temp = null; foreach (Ticket t in tickets) { if (t.Id == id) { temp = t; } } return temp; } public async Task> getAllTickets() { List lTickets = new List(); lTickets = await this.getTicketsFromLocalStorage(); if (lTickets.Count == 0) { lTickets = await this.getTicketsFromJson(this.EmplacementJson); await this.saveTicketsLocalStorage(lTickets); } return lTickets; } private async Task> getTicketsFromJson(String cheminVersJson) { List TicketsDeserialiser = new List(); var data = await _clientHttp.GetFromJsonAsync(cheminVersJson); TicketsDeserialiser = data.ToList(); return TicketsDeserialiser; } private async Task> getTicketsFromLocalStorage() { List TicketsFromLocalStorage = null; var data = await _localStorage.GetItemAsync(EmplacementLocalStorage); if (data == null) { TicketsFromLocalStorage = new List(); } else { TicketsFromLocalStorage = data.ToList(); } return TicketsFromLocalStorage; } public async Task RemoveTicket(Ticket t) { // Get the current data var currentData = await _localStorage.GetItemAsync>("data"); // Get the item int the list var item = currentData.FirstOrDefault(w => w.Id == t.Id); // Delete item in currentData.Remove(item); // Save the data await _localStorage.SetItemAsync("data", currentData); } public async Task SaveAllTickets(List list) { await this.saveTicketsLocalStorage(list); } private async Task saveTicketsLocalStorage(List lTickets) { await _localStorage.SetItemAsync(this.EmplacementLocalStorage, lTickets); } public async Task UpdateTicket(Ticket t) { await this.RemoveTicket(t); await this.AddTicket(t); } public async Task Close(int Id) { // Get the current data var currentData = await _localStorage.GetItemAsync>("data"); // Get the item int the list var item = currentData.FirstOrDefault(w => w.Id == Id); // Update item status item.isCheck = true; // Save the data await _localStorage.SetItemAsync("data", currentData); } } }