import 'dart:io';

import 'package:dio/dio.dart';
import 'package:getx_scaffold/getx_scaffold.dart';
import 'package:ln_jq_app/storage_service.dart';

/// 专门用于处理和添加 Token 的拦截器
class TokenInterceptor extends Interceptor {
  // 定义您想要使用的 Token Key
  final String tokenKey;
  final String sourceKey;

  // 构造函数，允许外部传入自定义的 Key，默认为 'Authorization'
  TokenInterceptor({this.tokenKey = 'Authorization', this.sourceKey = 'source'});

  @override
  void onRequest(RequestOptions options, RequestInterceptorHandler handler) async{
    // 从 StorageService 中获取已保存的 token
    final String? token = StorageService.to.token;

    // 如果 token 存在，就添加到请求头中
    if (token != null && token.isNotEmpty) {
      // 检查请求头中是否已存在这个key，避免重复添加
      if (!options.headers.containsKey(tokenKey)) {
        // 使用我们自定义的 key 添加 token
        options.headers[tokenKey] = token;
      }
    }

    String platformSource;
    if (Platform.isAndroid) {
      platformSource = 'Android';
    } else if (Platform.isIOS) {
      platformSource = 'iOS';
    } else {
      platformSource = '';
    }
    if (!options.headers.containsKey(sourceKey)) {
      options.headers[sourceKey] = platformSource;
    }

    options.headers['appVersion'] = await getVersion();
    options.headers['brand'] = await getDeviceModel();

    // 调用 handler.next(options) 以继续执行请求
    // 这一步至关重要，否则请求会被中断
    super.onRequest(options, handler);
  }
}
