using System; using System.Collections.Generic; using System.IO; using System.Text.Json; using System.Threading.Tasks; using TodoList.Models; namespace TodoList.Services { public class FileDataService : IDataService { private readonly string _filePath; public FileDataService() { var appData = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); var folder = Path.Combine(appData, "TodoListApp"); Directory.CreateDirectory(folder); _filePath = Path.Combine(folder, "tasks.json"); } public async Task> LoadTasksAsync() { if (!File.Exists(_filePath)) { return new List(); } try { using var stream = File.OpenRead(_filePath); var items = await JsonSerializer.DeserializeAsync>(stream); return items ?? new List(); } catch { return new List(); } } public async Task SaveTaskAsync(TodoItem task) { var tasks = await LoadTasksAsync(); var existing = tasks.Find(t => t.Id == task.Id); if (existing != null) { tasks.Remove(existing); } tasks.Add(task); await SaveAllAsync(tasks); } public async Task SaveAllAsync(List tasks) { using var stream = File.Create(_filePath); await JsonSerializer.SerializeAsync(stream, tasks, new JsonSerializerOptions { WriteIndented = true }); } public async Task DeleteTaskAsync(string id) { var tasks = await LoadTasksAsync(); var existing = tasks.Find(t => t.Id == id); if (existing != null) { tasks.Remove(existing); await SaveAllAsync(tasks); } } } }