using SharepointToolbox.Core.Models; using SharepointToolbox.Infrastructure.Persistence; namespace SharepointToolbox.Services; public class ProfileService { private readonly ProfileRepository _repository; public ProfileService(ProfileRepository repository) { _repository = repository; } public Task> GetProfilesAsync() => _repository.LoadAsync(); public async Task AddProfileAsync(TenantProfile profile) { if (string.IsNullOrWhiteSpace(profile.Name)) throw new ArgumentException("Profile name must not be empty.", nameof(profile)); if (string.IsNullOrWhiteSpace(profile.TenantUrl) || !Uri.TryCreate(profile.TenantUrl, UriKind.Absolute, out _)) throw new ArgumentException("TenantUrl must be a valid absolute URL.", nameof(profile)); if (string.IsNullOrWhiteSpace(profile.ClientId)) throw new ArgumentException("ClientId must not be empty.", nameof(profile)); var existing = (await _repository.LoadAsync()).ToList(); existing.Add(profile); await _repository.SaveAsync(existing); } public async Task RenameProfileAsync(string existingName, string newName) { var profiles = (await _repository.LoadAsync()).ToList(); var target = profiles.FirstOrDefault(p => p.Name == existingName) ?? throw new KeyNotFoundException($"Profile '{existingName}' not found."); target.Name = newName; await _repository.SaveAsync(profiles); } public async Task DeleteProfileAsync(string name) { var profiles = (await _repository.LoadAsync()).ToList(); var target = profiles.FirstOrDefault(p => p.Name == name) ?? throw new KeyNotFoundException($"Profile '{name}' not found."); profiles.Remove(target); await _repository.SaveAsync(profiles); } }