namespace RackPeek.Domain.Git.UseCases; public class AddRemoteUseCase(IGitRepository repo) : IUseCase { public Task ExecuteAsync(string url) { if (!repo.IsAvailable) return Task.FromResult("Git is not available."); if (string.IsNullOrWhiteSpace(url)) return Task.FromResult("URL is required."); url = url.Trim(); if (!url.StartsWith("https://", StringComparison.OrdinalIgnoreCase)) return Task.FromResult("Only HTTPS URLs are supported."); if (repo.HasRemote()) return Task.FromResult("Remote already configured."); try { repo.AddRemote("origin", url); // fetch remote state GitSyncStatus sync = repo.FetchAndGetSyncStatus(); // if remote already has commits, bring them locally if (sync.Behind > 0) { repo.Pull(); } return Task.FromResult(null); } catch (Exception ex) { return Task.FromResult($"Add remote failed: {ex.Message}"); } } }