import * as env from "../config/env.config";

/**
 * Obtiene la decisión de verificación de una sesión Didit.
 *
 * Consulta el endpoint `/session/{sessionId}/decision/` de la API de Didit
 * para obtener el resultado de la verificación de identidad.
 *
 * @export
 * @async
 * @param {string} sessionId - ID de la sesión de verificación.
 * @returns {Promise<any>} Datos de la decisión de verificación.
 * @throws {Error} Si la respuesta no es exitosa.
 */
export const getSessionDecision = async (sessionId: string) => {
  const endpoint = `${env.DIDIT_VERIFICATION_URL}/session/${sessionId}/decision/`;

  const headers = {
    "Content-Type": "application/json",
    "x-api-key": env.DIDIT_API_KEY,
  };

  try {
    const response = await fetch(endpoint, {
      method: "GET",
      headers,
    });

    const data = await response.json();

    if (response.ok) {
      return data;
    } else {
      throw new Error(data.message ?? data.detail);
    }
  } catch (err) {
    throw err;
  }
};

/**
 * Crea una nueva sesión de verificación de identidad en Didit.
 *
 * Envía `vendor_data`, `metadata`, `callback` y `workflow_id` al endpoint
 * de creación de sesiones. El `workflow_id` se obtiene de las variables de entorno.
 *
 * @export
 * @async
 * @param {string | null} vendorData - Datos del proveedor (opcional).
 * @param {string | null} metadata - Metadatos adicionales (opcional).
 * @param {string | null} callback - URL de callback (opcional).
 * @returns {Promise<any>} Datos de la sesión creada.
 * @throws {Error} Si la respuesta no es exitosa.
 */
export const createSession = async (
  vendorData: string | null,
  metadata: string | null,
  callback: string | null,
) => {
  const endpoint = `${env.DIDIT_VERIFICATION_URL}/session/`;

  const body = {
    vendor_data: vendorData,
    metadata: metadata,
    callback: callback,
    workflow_id: env.DIDIT_WORKFLOW_ID,
  };

  const headers = {
    "Content-Type": "application/json",
    "x-api-key": env.DIDIT_API_KEY,
  };

  try {
    const response = await fetch(endpoint, {
      method: "POST",
      headers,
      body: JSON.stringify(body),
    });

    const data = await response.json();

    if (response.ok) {
      return data;
    } else {
      throw new Error(data.message ?? data.detail);
    }
  } catch (err) {
    throw err;
  }
};
