import '../github/github_auth_service.dart'; import '../github/github_sync_service.dart'; import 'sync_models.dart'; import 'sync_provider.dart'; /// GitHub Synchronization Provider implementing Phase 2A SyncProvider. /// Wraps existing GitHubSyncService cleanly without modifying its internal logic. class GitHubSyncProvider implements SyncProvider { final GitHubSyncService service; final GitHubAuthService auth; GitHubSyncProvider({ required this.service, required this.auth, }); @override String get providerId => 'github'; @override Future isAvailable() async { return auth.getToken() != null; } @override Future requiresAuthentication() async { return auth.getToken() == null; } @override Future uploadRide(SyncItem item) async { final hasAuth = auth.getToken() != null; if (!hasAuth) { return SyncResult.authRequired( message: 'GitHub Personal Access Token (PAT) required for synchronization.', ); } final result = await service.uploadRide(item.localRideId); if (result.success) { return SyncResult.success( remoteId: result.commitSha ?? 'commit_${result.targetPath}', timestamp: result.timestamp, ); } if (service.state == GitHubUploadState.authRequired) { return SyncResult.authRequired(message: result.message); } return SyncResult.temporaryFailure(result.message); } }