import 'package:get/get.dart'; import '../../../data/services/language_manager.dart'; /// 图片翻译历史记录模型 class PictureTranslationHistory { final String id; final String imagePath; final String sourceText; final String translatedText; final String sourceLanguageCode; final String targetLanguageCode; final DateTime timestamp; final String? thumbnailPath; // 缩略图路径 PictureTranslationHistory({ required this.id, required this.imagePath, required this.sourceText, required this.translatedText, required this.sourceLanguageCode, required this.targetLanguageCode, required this.timestamp, this.thumbnailPath, }); /// 从JSON创建实例 factory PictureTranslationHistory.fromJson(Map json) { return PictureTranslationHistory( id: json['id'] ?? '', imagePath: json['imagePath'] ?? '', sourceText: json['sourceText'] ?? '', translatedText: json['translatedText'] ?? '', sourceLanguageCode: json['sourceLanguageCode'] ?? 'zh-CN', targetLanguageCode: json['targetLanguageCode'] ?? 'en-US', timestamp: DateTime.parse(json['timestamp'] ?? DateTime.now().toIso8601String()), thumbnailPath: json['thumbnailPath'], ); } /// 转换为JSON Map toJson() { return { 'id': id, 'imagePath': imagePath, 'sourceText': sourceText, 'translatedText': translatedText, 'sourceLanguageCode': sourceLanguageCode, 'targetLanguageCode': targetLanguageCode, 'timestamp': timestamp.toIso8601String(), 'thumbnailPath': thumbnailPath, }; } /// 获取源语言中文名称 String get sourceLanguageName { final languageManager = Get.find(); return languageManager.getChineseNameByAsrCode(sourceLanguageCode) ?? '未知语言'; } /// 获取目标语言中文名称 String get targetLanguageName { final languageManager = Get.find(); return languageManager.getChineseNameByAsrCode(targetLanguageCode) ?? '未知语言'; } /// 创建副本 PictureTranslationHistory copyWith({ String? id, String? imagePath, String? sourceText, String? translatedText, String? sourceLanguageCode, String? targetLanguageCode, DateTime? timestamp, String? thumbnailPath, }) { return PictureTranslationHistory( id: id ?? this.id, imagePath: imagePath ?? this.imagePath, sourceText: sourceText ?? this.sourceText, translatedText: translatedText ?? this.translatedText, sourceLanguageCode: sourceLanguageCode ?? this.sourceLanguageCode, targetLanguageCode: targetLanguageCode ?? this.targetLanguageCode, timestamp: timestamp ?? this.timestamp, thumbnailPath: thumbnailPath ?? this.thumbnailPath, ); } } /// 处理状态枚举 enum ProcessingStatus { idle, // 空闲 picking, // 选择图片 recognizing, // 识别文本 translating, // 翻译文本 saving, // 保存记录 error, // 错误状态 } /// 处理步骤信息 class ProcessingStep { final String title; final String description; final ProcessingStatus status; final double progress; final String? error; ProcessingStep({ required this.title, required this.description, required this.status, this.progress = 0.0, this.error, }); ProcessingStep copyWith({ String? title, String? description, ProcessingStatus? status, double? progress, String? error, }) { return ProcessingStep( title: title ?? this.title, description: description ?? this.description, status: status ?? this.status, progress: progress ?? this.progress, error: error ?? this.error, ); } } /// 图片翻译返回的坐标点模型(用于文本块四个点) class Point2D { final int x; final int y; Point2D({required this.x, required this.y}); /// 从JSON创建 factory Point2D.fromJson(Map json) { return Point2D( x: (json['X'] ?? 0) as int, y: (json['Y'] ?? 0) as int, ); } } /// 图片翻译返回的文本块模型 class ImageTextBlock { final List points; // 文本块四点坐标 final String detectedLanguage; // 检测到的语种 final String text; // 识别内容 final String translation; // 翻译结果 final List? foreColor; // 文字平均色 RGBA final List? backColor; // 背景平均色 RGBA ImageTextBlock({ required this.points, required this.detectedLanguage, required this.text, required this.translation, this.foreColor, this.backColor, }); /// 从JSON创建 factory ImageTextBlock.fromJson(Map json) { final List pts = (json['Points'] ?? []) as List; return ImageTextBlock( points: pts.map((e) => Point2D.fromJson(e as Map)).toList(), detectedLanguage: (json['DetectedLanguage'] ?? '') as String, text: (json['Text'] ?? '') as String, translation: (json['Translation'] ?? '') as String, foreColor: (json['ForeColor'] as List?)?.map((e) => e as int).toList(), backColor: (json['BackColor'] as List?)?.map((e) => e as int).toList(), ); } } /// 图片翻译结果模型(包含回贴后的图片和文本块列表) class ImageTranslationResult { final List? translatedImageBytes; // 回贴后的图片二进制(Uint8List) final List blocks; // 文本块列表 final String? detectedLanguage; // 可选:整体检测到的语种 ImageTranslationResult({ required this.translatedImageBytes, required this.blocks, this.detectedLanguage, }); }