import 'package:checker/strings.dart';
import 'package:flutter/services.dart';

import 'common.dart';

// Клиент http приложения
final httpClient = createHttpClient();

// Попытка создать токен для кассы.
// В случае если токен для кассы уже существует, вернется ошибка 409.
// На сервере есть ограничение в 40 токенов.
getCreateTokenRequest(Map httpBody) async {
  return httpClient.post(
      await getEndpoint() + 'tokens/?_dmapptoken=' + await getToken(),
      body: httpBody,
      headers: {'Accept-Language': StringsLocalization.localeCode});
}

// Проверка статуса токена. В ответе  приходит параметр active, который может быть либо true, либо false,.
getCheckTokenStatusRequest(String token) async {
  return httpClient.get(
      await getEndpoint() +
          'tokens/' +
          token +
          '?_dmapptoken=' +
          await getToken(),
      headers: {'Accept-Language': StringsLocalization.localeCode});
}

// Удаление токена на сервере.
getDeleteTokenRequest(String token) async {
  return httpClient.delete(
      await getEndpoint() + 'tokens/' + token + '?_dmapptoken=' +
          await getToken(), headers: {'Accept-Language': StringsLocalization.localeCode});
}

getLoyaltyRequest(String endpoint, String token) async {
  var headers = {
    'DM-Authorization': 'dmapptoken ${await getToken()}',
    'Authorization': 'dmtoken $token',
    'Accept-Language': StringsLocalization.localeCode
  };

  return httpClient.get(endpoint, headers: headers);
}

getPurchaseRequest(String endpoint, Map body, String token) async {

  var headers = {
    'DM-Authorization': 'dmapptoken ${await getToken()}',
    'Authorization': 'dmtoken $token',
    'Accept-Language': StringsLocalization.localeCode
  };

  return httpClient.post(endpoint, body: body, headers: headers);
}

getCouponsRequest(String endpoint, String token) async {

  var headers = {
    'DM-Authorization': 'dmapptoken ${await getToken()}',
    'Authorization': 'dmtoken $token',
    'Accept-Language': StringsLocalization.localeCode
  };

  print(headers);

  return httpClient.get(endpoint, headers: headers);
}

getUserByCard(String card, String token) async {

  var headers = {
    'DM-Authorization': 'dmapptoken ${await getToken()}',
    'Authorization': 'dmtoken $token',
    'Accept-Language': StringsLocalization.localeCode
  };


  var finalEndpoint = "${await getEndpoint()}users/?auto=$card";
  print(finalEndpoint);

  return httpClient.get(finalEndpoint, headers: headers);
}

getUserByPhone(String phone, String token) async {

  var headers = {
    'DM-Authorization': 'dmapptoken ${await getToken()}',
    'Authorization': 'dmtoken $token',
    'Accept-Language': StringsLocalization.localeCode
  };


  var finalEndpoint = "${await getEndpoint()}users/?phone=$phone";
  print(finalEndpoint);

  return httpClient.get(finalEndpoint, headers: headers);
}

getEndpoint() async {
  return await platform.invokeMethod('getEndpoint');
}

getToken() async {
  return await platform.invokeMethod('getAppToken');
}
