import 'package:get/get.dart'; import 'package:flutter/material.dart'; import '../../../data/services/usage_stats_service.dart'; import '../../../core/utils/logger.dart'; class TranslationCostController extends GetxController { final UsageStatsService _usageService = Get.find(); final RxMap costConfig = {}.obs; final RxDouble dailyCostThreshold = 10.0.obs; final RxDouble monthlyCostThreshold = 300.0.obs; final translationCostController = TextEditingController(); final asrCostController = TextEditingController(); final ttsCostController = TextEditingController(); final aiSummaryCostController = TextEditingController(); final dailyThresholdController = TextEditingController(); final monthlyThresholdController = TextEditingController(); final isLoading = false.obs; final isSaving = false.obs; @override void onInit() { super.onInit(); } @override void onClose() { translationCostController.dispose(); asrCostController.dispose(); ttsCostController.dispose(); aiSummaryCostController.dispose(); dailyThresholdController.dispose(); monthlyThresholdController.dispose(); super.onClose(); } void _loadCurrentConfig() {} Future saveConfig() async {} void resetToDefault() {} bool _validateInputs() { try { final translationCost = double.parse(translationCostController.text); final asrCost = double.parse(asrCostController.text); final ttsCost = double.parse(ttsCostController.text); final aiSummaryCost = double.parse(aiSummaryCostController.text); final dailyThreshold = double.parse(dailyThresholdController.text); final monthlyThreshold = double.parse(monthlyThresholdController.text); if (translationCost < 0 || asrCost < 0 || ttsCost < 0 || aiSummaryCost < 0) { _showErrorSnackbar('成本不能为负数'); return false; } if (dailyThreshold < 0 || monthlyThreshold < 0) { _showErrorSnackbar('预警阈值不能为负数'); return false; } if (dailyThreshold > monthlyThreshold) { _showErrorSnackbar('日预警阈值不能大于月预警阈值'); return false; } return true; } catch (e) { _showErrorSnackbar('请输入有效的数字'); return false; } } double calculateEstimatedMonthlyCost() { return 0.0; } List getCostSavingTips() { return []; } void _showSuccessSnackbar(String message) { Get.snackbar( '成功', message, snackPosition: SnackPosition.TOP, backgroundColor: Get.theme.colorScheme.primary.withValues(alpha: 0.1), colorText: Get.theme.colorScheme.primary, duration: const Duration(seconds: 3), ); } void _showErrorSnackbar(String message) { Get.snackbar( '错误', message, snackPosition: SnackPosition.TOP, backgroundColor: Get.theme.colorScheme.error.withValues(alpha: 0.1), colorText: Get.theme.colorScheme.error, duration: const Duration(seconds: 3), ); } void _showInfoSnackbar(String message) { Get.snackbar( '提示', message, snackPosition: SnackPosition.TOP, backgroundColor: Get.theme.colorScheme.surface.withValues(alpha: 0.9), colorText: Get.theme.colorScheme.onSurface, duration: const Duration(seconds: 3), ); } String formatCost(double cost) { return '¥${cost.toStringAsFixed(2)}'; } String formatPercentage(double percentage) { return '${percentage.toStringAsFixed(1)}%'; } }