import 'package:dio/dio.dart';
import 'package:holzleitner_api/holzleitner_api.dart';

import 'auth_token_provider.dart';
import 'backend_config.dart';
import 'holzleitner_auth_interceptor.dart';

/// Baut den generierten `HolzleitnerApi`-Client mit:
/// * eigener `Dio`-Instanz (Base-URL + Timeouts aus [BackendConfig]),
/// * **ohne** die vier Default-Auth-Interceptors des Generators —
///   stattdessen wird unser [HolzleitnerAuthInterceptor] gehängt.
///
/// Auf diese Weise bleibt die Token-Quelle pluggable
/// ([AuthTokenProvider]), und Phase B (Keycloak OIDC) kann die
/// Provider-Implementierung austauschen, ohne den Rest des Codes
/// anzufassen.
HolzleitnerApi buildHolzleitnerApi({
  required BackendConfig config,
  required AuthTokenProvider tokenProvider,
}) {
  final dio = Dio(
    BaseOptions(
      baseUrl: config.apiBaseUrl,
      connectTimeout: const Duration(seconds: 10),
      receiveTimeout: const Duration(seconds: 30),
      sendTimeout: const Duration(seconds: 30),
      headers: const {'Accept': 'application/json'},
    ),
  );

  return HolzleitnerApi(
    dio: dio,
    interceptors: [HolzleitnerAuthInterceptor(tokenProvider)],
  );
}
