import 'package:dio/dio.dart';

import 'auth_token_provider.dart';

/// Dio-Interceptor, der pro Request den aktuellen Access-Token vom
/// `AuthTokenProvider` zieht und als `Authorization: Bearer …`-Header
/// anhängt. Provider-Fehler werden geloggt, der Request läuft trotzdem
/// weiter — das Backend antwortet dann mit 401, was der reguläre
/// Error-Handling-Pfad behandelt.
class HolzleitnerAuthInterceptor extends Interceptor {
  HolzleitnerAuthInterceptor(this._tokenProvider);

  final AuthTokenProvider _tokenProvider;

  @override
  Future<void> onRequest(
    RequestOptions options,
    RequestInterceptorHandler handler,
  ) async {
    try {
      final token = await _tokenProvider.currentAccessToken();
      if (token != null) {
        options.headers['Authorization'] = 'Bearer $token';
      }
    } catch (e, stack) {
      // TODO Phase B: hier ein strukturiertes Logging-Framework
      // einhängen statt print.
      // ignore: avoid_print
      print('[HolzleitnerAuthInterceptor] Token-Provider hat geworfen: $e\n$stack');
    }
    handler.next(options);
  }
}
