import 'package:problem_check_system/data/models/image_metadata_model.dart'; import 'package:problem_check_system/data/models/problem_model.dart'; import 'package:uuid/uuid.dart'; enum ProblemSyncStatus { /// 未跟踪 - 需要被移除的记录(如本地删除但从未同步过) untracked, /// 已同步 - 与服务器完全一致(类似git的unmodified) synced, /// 待创建 - 新问题,需要上传到服务器(类似git的untracked → staged) pendingCreate, /// 待更新 - 已修改的问题,需要更新到服务器(类似git的modified → staged) pendingUpdate, /// 待删除 - 已标记删除,需要从服务器删除(类似git的deleted → staged) pendingDelete, } /// 问题状态管理器 - 类似 git add/git commit class ProblemStateManager { /// 静态对象uuid static final Uuid _uuid = Uuid(); /// 创建新问题(类似创建新文件) static Problem createNewProblem({ required String description, required String location, required List imageUrls, }) { return Problem( id: _uuid.v4(), description: description, location: location, imageUrls: imageUrls, creationTime: DateTime.now(), lastModifiedTime: DateTime.now(), syncStatus: ProblemSyncStatus.pendingCreate, ); } /// 修改问题内容(类似编辑文件) static Problem modifyProblem(Problem problem) { final newStatus = problem.syncStatus == ProblemSyncStatus.synced ? ProblemSyncStatus .pendingUpdate // 已同步的改为待更新 : problem.syncStatus; // 保持原有待处理状态 return problem.copyWith( syncStatus: newStatus, lastModifiedTime: DateTime.now(), ); } /// 标记问题为删除 static Problem markForDeletion(Problem problem) { switch (problem.syncStatus) { case ProblemSyncStatus.pendingCreate: // 待创建的问题 → 未跟踪(直接移除) return problem.copyWith( syncStatus: ProblemSyncStatus.untracked, lastModifiedTime: DateTime.now(), ); case ProblemSyncStatus.synced: case ProblemSyncStatus.pendingUpdate: // 已同步或待更新的问题 → 待删除(需要服务器操作) return problem.copyWith( syncStatus: ProblemSyncStatus.pendingDelete, lastModifiedTime: DateTime.now(), ); case ProblemSyncStatus.untracked: case ProblemSyncStatus.pendingDelete: // 已经是删除相关状态,无需变化 return problem; } } /// 撤销删除(类似 git reset) static Problem undoDeletion(Problem problem) { if (problem.syncStatus == ProblemSyncStatus.pendingDelete) { return problem.copyWith( syncStatus: ProblemSyncStatus.pendingUpdate, lastModifiedTime: DateTime.now(), ); } return problem; } /// 同步成功后的状态更新(类似 git commit 成功) static Problem markAsSynced(Problem problem) { return problem.copyWith( syncStatus: ProblemSyncStatus.synced, lastModifiedTime: DateTime.now(), ); } }