import 'dart:io'; class MarketQuestionLogger { MarketQuestionLogger._(); static const String _logFilePrefix = 'market_questions_'; static const String _logFileSuffix = '.log'; /// Log an answered market question to a date-stamped file with a 2-day rotation. static Future logAnswer({ required String questionId, required String userId, required String symbol, required num response, required num correctAnswer, required bool isInverted, DateTime? now, }) async { final DateTime time = now ?? DateTime.now().toUtc(); final String dateString = _formatDate(time); // Construct today's and yesterday's file names final String todayFileName = '$_logFilePrefix$dateString$_logFileSuffix'; final String yesterdayFileName = '$_logFilePrefix${_formatDate(time.subtract(const Duration(days: 1)))}$_logFileSuffix'; // 1. Write the log entry final String logLine = '[${time.toIso8601String()}] ' 'Question ID: $questionId, ' 'User ID: $userId, ' 'Symbol: $symbol, ' 'Response: $response, ' 'Correct: $correctAnswer, ' 'Inverted: $isInverted\n'; final File logFile = File(todayFileName); try { await logFile.writeAsString(logLine, mode: FileMode.append, flush: true); } catch (e) { stderr.writeln('Failed to write market question log: $e'); } // 2. Perform rotation (delete any log files that are not today's or yesterday's) try { final Directory currentDir = Directory.current; final List entities = currentDir.listSync(); for (final FileSystemEntity entity in entities) { if (entity is File) { final String name = entity.uri.pathSegments.last; if (name.startsWith(_logFilePrefix) && name.endsWith(_logFileSuffix)) { if (name != todayFileName && name != yesterdayFileName) { await entity.delete(); } } } } } catch (e) { stderr.writeln('Failed to rotate market question logs: $e'); } } static String _formatDate(DateTime dt) { final String y = dt.year.toString().padLeft(4, '0'); final String m = dt.month.toString().padLeft(2, '0'); final String d = dt.day.toString().padLeft(2, '0'); return '$y-$m-$d'; } }