/// Smoke-Test für den generierten Holzleitner-API-Client.
///
/// Läuft als reines Dart-Script (kein Flutter-Engine nötig):
///
///   dart run tool/smoke_test_api.dart
///
/// Voraussetzungen:
///   * Backend läuft unter http://127.0.0.1:3000
///   * Keycloak läuft unter http://127.0.0.1:8080
///   * Testfahrer (PN 1001) ist im Keycloak-Realm angelegt
///
/// Was getestet wird:
///   1. /health (ohne Auth)
///   2. /me/cars (mit Auth via DevPasswordGrantTokenProvider)
library;

import 'package:dio/dio.dart';
import 'package:hl_lieferservice/data/network/backend_config.dart';
import 'package:hl_lieferservice/data/network/dev_password_grant_token_provider.dart';
import 'package:hl_lieferservice/data/network/holzleitner_api_factory.dart';

Future<void> main() async {
  const config = BackendConfig.prod;

  // Health geht ohne Auth — wir nutzen die generierte API-Klasse trotzdem,
  // um zu zeigen, dass der Aufruf-Pfad funktioniert.
  print('---- 1) GET /health ----');
  final tokenProvider = DevPasswordGrantTokenProvider(
    tokenEndpoint: config.keycloakTokenEndpoint,
    clientId: config.keycloakClientId,
    username: 'testfahrer',
    password: 'test',
  );
  final api = buildHolzleitnerApi(
    config: config,
    tokenProvider: tokenProvider,
  );

  try {
    final health = await api.getHealthApi().health();
    print('  OK: ${health.data?.length ?? 0} bytes  →  ${health.data}');
  } on DioException catch (e) {
    print('  FEHLER: ${e.message}');
    print('  Response: ${e.response?.data}');
    return;
  }

  print('\n---- 2) GET /me/cars (mit Bearer-Token) ----');
  try {
    final response = await api.getCarsApi().listMyCars();
    final cars = response.data?.cars;
    if (cars == null) {
      print('  OK: leerer Body');
      return;
    }
    print('  OK: ${cars.length} Fahrzeug(e)');
    for (final c in cars) {
      print('    • ${c.id}  ${c.plate}  active=${c.active}');
    }
  } on DioException catch (e) {
    print('  FEHLER: ${e.message}');
    print('  Response: ${e.response?.data}');
  }
}
