Files
BudgetApp/lib/services/custom_sms_functions.dart
T
2025-08-02 15:25:25 +03:00

76 lines
3.4 KiB
Dart

import 'package:budget_app/models/transaction_record.dart';
import 'package:budget_app/services/ai_transaction_processing_service.dart';
import 'package:get_it/get_it.dart';
import 'package:logger/logger.dart';
/// Псевдоним для типа функции обработки СМС
typedef SmsProcessingFunction = Future<TransactionRecord?> Function(String smsBody);
/// Класс для управления кастомными функциями обработки СМС
class CustomSmsFunctions {
// Приватный конструктор, чтобы нельзя было создать экземпляр класса
CustomSmsFunctions._();
/// Карта доступных кастомных функций.
/// Ключ - это уникальный идентификатор функции, который будет храниться в настройках.
/// Значение - это сама функция.
static final Map<String, SmsProcessingFunction> _availableFunctions = {
'ai_request': _aiRequestHandler,
};
/// Карта с названиями функций для отображения в UI.
/// Ключ - идентификатор функции, значение - человекочитаемое имя.
static final Map<String, String> functionNames = {
'ai_request': 'Запрос к ИИ',
};
/// Возвращает список идентификаторов доступных функций.
static List<String> get availableFunctionIds => _availableFunctions.keys.toList();
/// Возвращает функцию по ее идентификатору.
static SmsProcessingFunction? getFunctionById(String id) {
return _availableFunctions[id];
}
// --- Реализации кастомных функций ---
/// Обработчик для функции "Запрос к ИИ".
/// Анализирует текст СМС с помощью ИИ и создает транзакцию.
static Future<TransactionRecord?> _aiRequestHandler(String smsBody) async {
final logger = Logger();
try {
logger.i('--- AI Request Handler ---');
logger.i('SMS Body: $smsBody');
// Получаем сервис обработки ИИ транзакций
final aiProcessingService = GetIt.instance<AiTransactionProcessingService>();
// Создаем уникальный ID для SMS (в реальности будет передаваться извне)
final smsMessageId = DateTime.now().millisecondsSinceEpoch.toString();
// Обрабатываем SMS с помощью ИИ
final prefilledTransaction = await aiProcessingService.processSmsByAi(
smsBody,
smsMessageId
);
logger.i('ИИ создал PrefilledTransaction: ${prefilledTransaction.salesPoint}, ${prefilledTransaction.amount}');
// Конвертируем PrefilledTransaction в TransactionRecord
final transactionRecord = await aiProcessingService.convertToTransactionRecord(
prefilledTransaction
);
logger.i('Создана транзакция: ${transactionRecord.vendor}, ${transactionRecord.amount}');
logger.i('--- End AI Request Handler ---');
return transactionRecord;
} catch (e) {
logger.e('Ошибка в AI Request Handler: $e');
return null;
}
}
}