import '../../core/errors/app_exception.dart'; import '../models/post.dart'; import '../models/post_comment.dart'; import '../models/provider_health.dart'; import '../models/top_period_filter.dart'; import 'content_provider.dart'; class CustomProvider implements ContentProvider, CommentProvider { CustomProvider(this._delegate); final ContentProvider _delegate; @override String get id => _delegate.id; @override String get name => _delegate.name; @override String get baseUrl => _delegate.baseUrl; @override Future> searchPosts({ required List tags, required int page, int limit = 50, String? rating, TopPeriodFilter topPeriod = TopPeriodFilter.none, }) => _delegate.searchPosts( tags: tags, page: page, limit: limit, rating: rating, topPeriod: topPeriod, ); @override Future getPost(String id) => _delegate.getPost(id); @override Future checkHealth() => _delegate.checkHealth(); @override Future> getComments(String postId) { final delegate = _delegate; if (delegate is CommentProvider) { return (delegate as CommentProvider).getComments(postId); } return Future.value(const []); } } class UnsupportedCustomProvider implements ContentProvider { UnsupportedCustomProvider({ required this.id, required this.name, required this.baseUrl, required this.apiType, }); @override final String id; @override final String name; @override final String baseUrl; final String apiType; @override Future> searchPosts({ required List tags, required int page, int limit = 50, String? rating, TopPeriodFilter topPeriod = TopPeriodFilter.none, }) async { throw ProviderUnavailableException( 'Unsupported provider apiType: $apiType'); } @override Future getPost(String id) async { throw ProviderUnavailableException( 'Unsupported provider apiType: $apiType'); } @override Future checkHealth() async => ProviderHealth( providerId: id, status: ProviderStatus.offline, pingMs: 0, lastCheckedAt: DateTime.now(), errorMessage: 'Unsupported provider apiType: $apiType', ); }