import { obtenerParametroUrl } from "./funcionesGenerales.js?v=1.0.0";

const metodosFetch = {};

metodosFetch.get = function ({
  archivo,
  modulo,
  loader = true,
  parametros = {},
}) {
  return new Promise(async (resolve, reject) => {
    try {
      const loaderHTML = document.querySelector(".loader");

      loader && loaderHTML && loaderHTML.classList.remove("d-none");

      const arrParametros = [],
        contenedorModulo = !!modulo ? `${modulo}/` : "",
        idApartado = obtenerParametroUrl("aid");

      for (let key in parametros) {
        arrParametros.push(`${key}=${encodeURIComponent(parametros[key])}`);
      }

      arrParametros.push(`aid=${idApartado}`);

      const init = {
        method: "GET",
        headers: {
          "Content-Type": "application/json",
        },
      };

      let response = await fetch(
        `main/${contenedorModulo}code/${archivo}.php?${arrParametros.join(
          "&"
        )}`,
        init
      );

      if (response.ok) {
        loader && loaderHTML && loaderHTML.classList.add("d-none");
        let data = await response.json();
        resolve(data);
      } else {
        let codigoHttp = response.status,
          mensaje =
            codigoHttp == 404
              ? {
                  status: codigoHttp,
                  message: `No se encontró el archivo <strong>${archivo}</strong>`,
                }
              : await response.json();

        reject(mensaje);
      }
    } catch (err) {
      reject(err);
    }
  });
};

metodosFetch.post = function ({ archivo, modulo, loader = true, data = {} }) {
  return new Promise(async (resolve, reject) => {
    try {
      const loaderHTML = document.querySelector(".loader");

      loader && loaderHTML && loaderHTML.classList.remove("d-none");

      const contenedorModulo = !!modulo ? `${modulo}/` : "",
        idApartado = obtenerParametroUrl("aid");

      data.aid = idApartado;

      const init = {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
        },
        body: JSON.stringify(data),
      };

      let response = await fetch(
        `main/${contenedorModulo}code/${archivo}.php`,
        init
      );

      if (response.ok) {
        loader && loaderHTML && loaderHTML.classList.add("d-none");
        let data = await response.json();
        resolve(data);
      } else {
        let codigoHttp = response.status,
          mensaje =
            codigoHttp == 404
              ? {
                  status: codigoHttp,
                  message: `No se encontró el archivo <strong>${archivo}</strong>`,
                }
              : await response.json();

        reject(mensaje);
      }
    } catch (err) {
      reject(err);
    }
  });
};

metodosFetch.postWithFiles = function ({
  archivo,
  modulo,
  loader = true,
  data = new FormData(),
}) {
  return new Promise(async (resolve, reject) => {
    try {
      const loaderHTML = document.querySelector(".loader");

      loader && loaderHTML && loaderHTML.classList.remove("d-none");

      const contenedorModulo = !!modulo ? `${modulo}/` : "",
        idApartado = obtenerParametroUrl("aid");

      data.append("aid", idApartado);

      const init = {
        method: "POST",
        body: data,
      };

      let response = await fetch(
        `main/${contenedorModulo}code/${archivo}.php`,
        init
      );

      if (response.ok) {
        loader && loaderHTML && loaderHTML.classList.add("d-none");
        let data = await response.json();
        resolve(data);
      } else {
        let codigoHttp = response.status,
          mensaje =
            codigoHttp == 404
              ? {
                  status: codigoHttp,
                  message: `No se encontró el archivo <strong>${archivo}</strong>`,
                }
              : await response.json();

        reject(mensaje);
      }
    } catch (err) {
      reject(err);
    }
  });
};

export default metodosFetch;
