import 'package:dio/dio.dart';
import 'config.dart'; //用于配置公用常量
import 'session.dart';


class Http {
  static Http instance;
  static String token;
  static Config _config = Config();
  static Dio _dio;
  BaseOptions _options;

  static Http getInstance() {
    print("getInstance");
    if (instance == null) {
      instance = new Http();
    }
  }

  Http() {
    // 初始化 Options
    _options = BaseOptions(
      baseUrl: _config.baseUrl,
      connectTimeout: _config.connectTimeout,
      receiveTimeout: _config.receiveTimeout,
      headers: {
        
      }
    );

    _dio = new Dio(_options);
    // //发送请求拦截处理，例如：添加token使用
    _dio.interceptors.add(InterceptorsWrapper(
      onRequest: (RequestOptions options) {
        getKey('token').then((value){
          if(value!=null){
            options.headers = {
              "token":value
            };
          }
        return options; //continue  
        });
      },
      onResponse: (Response response) {
       return response;
      },
      onError: (DioError e) {
        print(e);
        return e; //continue
      }
    ));

  }

  // get 请求封装
  get(url, {
    options,
    cancelToken,
    data = null
  }) async {
    //print('get:::url：$url ,body: $data');
    Response response;
    try {
      response = await _dio.get(
        url,
        queryParameters: data,
        cancelToken: cancelToken
      );
    }
    on DioError
    catch (e) {
      if (CancelToken.isCancel(e)) {
        print('get请求取消! ' + e.message);
      } else {
        print('get请求发生错误：$e----$url');
      }
      return e;
    }
    //print(response);
    return response;
  }

  // post请求封装
  post(url, {
    options,
    cancelToken,
    data = null
  }) async {
    print('post请求::: url：$url ,body: $data');
    Response response;

    try {
      response = await _dio.post(
        url,
        data: data != null ? data : {},
        cancelToken: cancelToken
      );
    }
    on DioError
    catch (e) {
      if (CancelToken.isCancel(e)) {
        print('post请求取消! ' + e.message);
      } else {
        print('post请求发生错误：$e');
      }
      return e;
    }
    return response;
  }
}