import {
  addQueryParams, errorHandler, fetchRespHandler, getAuthHeaderOptions
} from "../utils/http";

const API_ENDPOINT = process.env.REACT_APP_OTA_SERVICE_URL;

const suppliersAPI = {
  addSupplier: async (vehicle, token) =>
    fetch(`${API_ENDPOINT}/supplier`, {
      method: "POST",
      headers: Object.assign(
        { "Content-Type": "application/json" },
        getAuthHeaderOptions(token)
      ),
      body: JSON.stringify(vehicle),
    })
      .then(fetchRespHandler)
      .catch(errorHandler),

  activateSupplier: async (email, token) =>
    fetch(`${API_ENDPOINT}/supplier/activate/${email}`, {
      method: "POST",
      headers: Object.assign(
        { "Content-Type": "application/json" },
        getAuthHeaderOptions(token)
      ),
    })
      .then(fetchRespHandler)
      .catch(errorHandler),

  deleteSupplier: async (email, token) =>
    fetch(`${API_ENDPOINT}/supplier/${email}`, {
      method: "DELETE",
      headers: Object.assign(
        { "Content-Type": "application/json" },
        getAuthHeaderOptions(token)
      ),
    })
      .then(fetchRespHandler)
      .catch(errorHandler),

  getSupplier: async (email, token, signal) =>
    fetch(`${API_ENDPOINT}/supplier/${email}`, {
      method: "GET",
      headers: Object.assign(
        { "Content-Type": "application/json" },
        getAuthHeaderOptions(token)
      ),
      signal,
    })
      .then(fetchRespHandler)
      .catch(errorHandler),

  getSuppliers: async (search, token) => {
    const u = addQueryParams(`${API_ENDPOINT}/suppliers`, search);
    return fetch(u, {
      method: "GET",
      headers: Object.assign(
        { "Content-Type": "application/json" },
        getAuthHeaderOptions(token)
      ),
    })
      .then(fetchRespHandler)
      .catch(errorHandler);
  },

  updateSupplier: async (email, supplier, token) =>
    fetch(`${API_ENDPOINT}/supplier/${email}`, {
      method: "PUT",
      headers: Object.assign(
        { "Content-Type": "application/json" },
        getAuthHeaderOptions(token)
      ),
      body: JSON.stringify(supplier),
    })
      .then(fetchRespHandler)
      .catch(errorHandler),

  getManufactureCert: async (token) =>
    fetch(`${API_ENDPOINT}/manufacture-certs`, {
      method: "POST",
      headers: Object.assign(
        { "Content-Type": "application/json" },
        getAuthHeaderOptions(token)
      ),
    })
      .then(fetchRespHandler)
      .catch(errorHandler)
};

export default suppliersAPI;
