import {encodeResponse} from "../utilities/appUtility";

const axios = require('axios');

function WopiAPI() {}

WopiAPI.prototype.getPassports = function (resourceID, contentType) {
  const { publicKey, uuid, token, deviceHash } = window.viamApi.getConfig().headers;
  const requestConfig = {
    url: `${window.WOPI_URL}getPassports`,
    method: 'POST',
    headers: {
      publicKey,
      uuid,
      token,
      deviceHash,
      resourceID: encodeURI(resourceID),
      contentType: encodeURI(contentType)
    }
  };

  return axios(requestConfig);
};

WopiAPI.prototype.createDocument = async (passportUUID, path, contentType, title) => {
  const authenticationPublicKey = localStorage.getItem("authenticatedIdentity");
  if (
    !authenticationPublicKey ||
    !window.loadedIdentities[authenticationPublicKey] ||
    !extendPinCodeTtl(authenticationPublicKey)
  ) {
    return encodeResponse("400", "", "Identity not authenticated");
  }

  const config = {
    headers: {
      path,
      passportuuid: passportUUID,
      contentType,
      title
    }
  };
  const response = await executeRestfulFunction("private", window.viamApi, window.viamApi.documentCreateDocument,
    config);

  const resourceID = response.data;
  return await this.getPassports(resourceID, contentType);
};

WopiAPI.prototype.putDocument = function (resourceID, accessToken, file) {
  const { publicKey, uuid, token, deviceHash } = window.viamApi.getConfig().headers;

  resourceID = encodeURI(resourceID);
  const requestConfig = {
    url: `${window.WOPI_URL}files/${resourceID}/contents`,
    method: 'POST',
    headers: {
      publicKey,
      uuid,
      token,
      deviceHash
    },
    params: {
      access_token: accessToken
    },
    data: file
  };

  return axios(requestConfig);
};

module.exports = WopiAPI;