import 'package:didvan/models/requests/infography.dart'; import 'package:didvan/models/requests/news.dart'; import 'package:didvan/models/requests/newstats_general.dart'; import 'package:didvan/models/requests/radar.dart'; import 'package:didvan/models/requests/studio.dart'; class RequestHelper { static const String baseUrl = 'https://api.didvan.app'; static const String _baseUserUrl = '$baseUrl/user'; static const String _baseRadarUrl = '$baseUrl/radar'; static const String _baseNewsUrl = '$baseUrl/news'; static const String _baseInfographyUrl = '$baseUrl/home/infography'; static const String _baseInfoTagUrl = '$baseUrl/home/infography/tags'; static const String _baseStudioUrl = '$baseUrl/studio'; static const String _baseStatisticUrl = '$baseUrl/statistic'; static const String _baseDirectUrl = '$_baseUserUrl/direct'; static const String _baseHomeUrl = '$baseUrl/home'; static const String _baseNewStats = '$baseUrl/home/statistic'; static const String _baseNewStatsSearch = '$baseUrl/home/statistic/search'; static const String mainPageContent = _baseHomeUrl; static String searchAll({ required int page, String? startDate, String? endDate, String? search, List? types, }) => '$_baseHomeUrl/search${_urlConcatGenerator([ MapEntry('page', page), MapEntry('start', startDate), MapEntry('end', endDate), MapEntry('q', search), MapEntry('type', _urlListConcatGenerator(types)), ])}'; static String searchMarks({ required int page, String? search, List? types, }) => '$_baseHomeUrl/mark${_urlConcatGenerator([ MapEntry('page', page), MapEntry('q', search), MapEntry('type', _urlListConcatGenerator(types)), ])}'; static const String confirmUsername = '$_baseUserUrl/confirmUsername'; static const String changePassword = '$_baseUserUrl/changePassword'; static const String login = '$_baseUserUrl/login'; static const String directs = '$_baseUserUrl/direct'; static const String userInfo = '$_baseUserUrl/info'; static const String firebaseToken = '$_baseUserUrl/firebaseToken'; static const String silenceInterval = '$_baseUserUrl/silenceInterval'; static const String updateProfilePhoto = '$_baseUserUrl/profile/photo'; static const String checkUsername = '$_baseUserUrl/CheckUsername'; static const String updateProfile = '$_baseUserUrl/profile/edit'; static const String otp = '$_baseUserUrl/otp'; static String editItemBookmark(String type, int id) => '$_baseHomeUrl/$type/$id/mark'; static const String directTypes = '$baseUrl/direct/types'; static String direct(int id) => '$_baseDirectUrl/$id'; static String sendDirectMessage(int id) => '$_baseDirectUrl/$id/sendMessage'; static String deleteDirect(int id, int messageId) => '$_baseDirectUrl/$id/message/$messageId'; static String tagV2({ required List ids, int? page, int? limit, }) => '$baseUrl/tag/v2${_urlConcatGenerator([ MapEntry('page', page), MapEntry('limit', limit ?? '3'), MapEntry('tags', _urlListConcatGenerator(ids)), ])}'; static String tag({ required List ids, String? type, int? itemId, int? page, int? limit, }) => '$baseUrl/tag${_urlConcatGenerator([ MapEntry('page', page), MapEntry('limit', limit ?? '3'), MapEntry('type', type), MapEntry('id', itemId ?? '1'), MapEntry('tags', _urlListConcatGenerator(ids)), ])}'; static String radarDetails(int id, RadarRequestArgs args) => '$_baseRadarUrl/$id${_urlConcatGenerator([ MapEntry('page', args.page), MapEntry('start', args.startDate), MapEntry('end', args.endDate), MapEntry('search', args.search), MapEntry('categories', _urlListConcatGenerator(args.categories)), ])}'; static String radarOverviews({required RadarRequestArgs args}) => _baseRadarUrl + _urlConcatGenerator([ MapEntry('page', args.page), MapEntry('start', args.startDate), MapEntry('end', args.endDate), MapEntry('search', args.search), MapEntry('categories', _urlListConcatGenerator(args.categories)), ]); static String newsDetails(int id, NewsRequestArgs args) => '$_baseNewsUrl/$id${_urlConcatGenerator([ MapEntry('page', args.page), MapEntry('start', args.startDate), MapEntry('end', args.endDate), MapEntry('search', args.search), ])}'; static String newsOverviews({required NewsRequestArgs args}) => _baseNewsUrl + _urlConcatGenerator([ MapEntry('page', args.page), MapEntry('start', args.startDate), MapEntry('end', args.endDate), MapEntry('search', args.search), ]); static String infographyOverviews({required InfographyRequestArgs args}) => _baseInfographyUrl + _urlConcatGenerator([ MapEntry('page', args.page), MapEntry('category', _urlListConcatGenerator(args.categories)), MapEntry('q', args.q), MapEntry('tag', _urlListConcatGenerator(args.tag)), ]); static String statisticGeneral( {required StatisticsGeneralRequestArgs args}) => _baseNewStatsSearch + _urlConcatGenerator([ MapEntry('page', args.page), MapEntry('category', args.categories), MapEntry('q', args.q), MapEntry('type', args.type), ]); static String newStatisticOverViw() => _baseNewStats; static String infographyTags() => _baseInfoTagUrl; static String studioSlider(String type) => '$_baseStudioUrl/slider${_urlConcatGenerator([MapEntry('type', type)])}'; static String studioDetails(int id, StudioRequestArgs args) => '$_baseStudioUrl/$id${_urlConcatGenerator([ MapEntry('page', args.page), MapEntry('type', args.type), MapEntry('order', args.order), MapEntry('search', args.search), MapEntry('asc', args.asc), MapEntry('start', args.startDate), MapEntry('end', args.endDate), ])}'; static String studioOverviews({required StudioRequestArgs args}) => _baseStudioUrl + _urlConcatGenerator([ MapEntry('page', args.page), MapEntry('type', args.type), MapEntry('order', args.order), MapEntry('search', args.search), MapEntry('asc', args.asc), MapEntry('start', args.startDate), MapEntry('end', args.endDate), ]); static String statisticOverviews(int? category) => _baseStatisticUrl + _urlConcatGenerator( [MapEntry('category', category)], ); static String statisticDetails( String label, String period, ) => '$_baseStatisticUrl/$label${_urlConcatGenerator([ MapEntry('period', period), ])}'; static String mark(int id, String type) => '$baseUrl/$type/$id/mark'; static String tracking(int id, String type) => '$baseUrl/$type/$id/tracking'; static String comments(int id, String type) => '$baseUrl/$type/$id/comments'; static String feedback(int id, int commentId, String type) => '$baseUrl/$type/$id/comments/$commentId/feedback'; static String addComment(int id, String type) => '$baseUrl/$type/$id/comments/add'; static String deleteComment(int id) => '$baseUrl/comment/$id'; static String reportComment(int id) => '$baseUrl/comment/$id/report'; static String _urlConcatGenerator(List> additions) { String result = ''; additions.removeWhere( (element) => element.value == null || element.value.toString().isEmpty, ); if (additions.isNotEmpty) { result += '?'; for (var i = 0; i < additions.length; i++) { result += ('${additions[i].key}=${additions[i].value!}'); if (i != additions.length - 1) { result += '&'; } } } return result; } static String? _urlListConcatGenerator(List? input) { String? result; if (input == null) return null; if (input.isNotEmpty) { result = ''; for (var i = 0; i < input.length; i++) { result = result! + input[i].toString(); if (i != input.length - 1) { result += ','; } } return result; } return null; } }