import 'package:swagger_generator_flutter/core/config_repository.dart'; import 'package:swagger_generator_flutter/utils/string_utils/text_cleaner.dart'; /// Template service for generating comments and file headers class TemplateService { // No instance fields needed; all methods use ConfigRepository. /// Generate comment block static String generateComment(String text, {bool isBlock = false}) { if (text.isEmpty) return ''; final cleanText = TextCleaner.cleanDescription(text); if (isBlock) { return '/**\n * $cleanText\n */'; } else { return '/// $cleanText'; } } /// Generate file header String generateFileHeader( String description, String source, { String? fileName, String? fileType, }) { // Load configuration repository synchronously final config = ConfigRepository.loadSync(); final template = config.fileHeaderTemplate; if (template != null && template.isNotEmpty) { return _applyFileHeaderTemplate( template, description: description, source: source, fileName: fileName ?? '', fileType: fileType ?? description, generatorName: config.generatorName, author: config.author, copyright: config.copyright, ); } // Use default template final generatorName = config.generatorName; final author = config.author; final copyright = config.copyright; return ''' // $description // 由 $generatorName by $author 生成 // $copyright '''; } /// Apply file header template String _applyFileHeaderTemplate( String template, { required String description, required String source, required String fileName, required String fileType, required String generatorName, required String author, required String copyright, }) { var result = template; // Replace template variables result = result.replaceAll('{fileName}', fileName); result = result.replaceAll('{fileType}', fileType); result = result.replaceAll('{swaggerUrl}', source); result = result.replaceAll('{generatorName}', generatorName); result = result.replaceAll('{author}', author); result = result.replaceAll('{copyright}', copyright); // If template doesn't contain comments, add default format if (!result.contains('//')) { result = '// $description\n$result'; } return result; } }