displayBlueprintSummary function

void displayBlueprintSummary(
  1. WizardIo io, {
  2. required String projectName,
  3. required String organization,
  4. required String destination,
  5. required Set<String> targetPlatforms,
  6. required bool gitPreference,
  7. required Map<String, String> singleSelections,
  8. required Map<String, List<String>> multiSelections,
})

Displays the full resolved Blueprint before any plan is generated (FR-006). singleSelections/multiSelections are catalog IDs only — this prints exactly what the Blueprint stores, no presentation text beyond section labels (FR-020, FR-023).

Implementation

void displayBlueprintSummary(
  WizardIo io, {
  required String projectName,
  required String organization,
  required String destination,
  required Set<String> targetPlatforms,
  required bool gitPreference,
  required Map<String, String> singleSelections,
  required Map<String, List<String>> multiSelections,
}) {
  io.writeLine('');
  io.writeLine('=== Section 12/12: Blueprint Summary and Review ===');
  io.writeLine('  Project Name:   $projectName');
  io.writeLine('  Organization:   $organization');
  io.writeLine('  Destination:    $destination');
  io.writeLine('  Platforms:      ${targetPlatforms.join(', ')}');
  io.writeLine('  Git:            ${gitPreference ? 'yes' : 'no'}');
  final foundationSelections = singleSelections.entries.where(
    (entry) => entry.key.startsWith('foundation.'),
  );
  if (foundationSelections.isNotEmpty) {
    io.writeLine('  Application Foundation:');
    for (final capabilityId in applicationFoundationCapabilityIds) {
      final optionId = singleSelections[capabilityId];
      if (optionId != null) io.writeLine('    $capabilityId: $optionId');
    }
  }
  for (final entry in singleSelections.entries.where(
    (entry) => !entry.key.startsWith('foundation.'),
  )) {
    io.writeLine('  ${entry.key}: ${entry.value}');
  }
  for (final entry in multiSelections.entries) {
    io.writeLine('  ${entry.key}: [${entry.value.join(', ')}]');
  }
}