loadRulesSessionVariables method

Future<AppContext> loadRulesSessionVariables()

Load session and custom scope variables from persistent storage

Implementation

Future<AppContext> loadRulesSessionVariables() async {
  try {
    final currentSessionId = IdManager.instance.getSessionId();

    if (currentSessionId == 'unknown') {
      ObslyLogger.debug('Cannot load variables - no valid session ID');
      return const AppContext();
    }

    // Load session variables
    final sessionVars = await ObslyStorage.instance.getInternalState<Map>(
      '${_sessionVariablesKey}_$currentSessionId',
    );

    // Load custom scopes
    final customScopes = await ObslyStorage.instance.getInternalState<Map>(
      '${_customScopesKey}_$currentSessionId',
    );

    final session = sessionVars != null
        ? Map<String, dynamic>.from(sessionVars)
        : <String, dynamic>{};

    final scopes = customScopes != null
        ? Map<String, dynamic>.from(customScopes)
        : <String, dynamic>{};

    // Always start with empty execution scope
    scopes['session'] = session;
    scopes['execution'] = <String, dynamic>{};

    ObslyLogger.debug(
      'Loaded rules session variables for session: $currentSessionId '
      '(session: ${session.length}, custom: ${scopes.length - 2})',
    );

    return AppContext(
      session: session,
      execution: <String, dynamic>{}, // Always empty on load
      scopes: scopes,
    );
  } catch (e) {
    ObslyLogger.error('Error loading rules session variables: $e');
    return const AppContext();
  }
}