import metodosFetch from "../app/metodosFetch.js?v=2.0.0";

class Empresa {
  constructor({
    id,
    principal = 0,
    codempresa,
    nombreEmpresa,
    rubros = [],
    modulos = [],
    urlApi = null,
    apiKey = null,
    fechaRegistro,
  }) {
    this.id = id;
    this.principal = principal;
    this.codempresa = codempresa;
    this.nombreEmpresa = nombreEmpresa;
    this.rubros = rubros;
    this.modulos = modulos;
    this.urlApi = urlApi;
    this.apiKey = apiKey;
    this.fechaRegistro = fechaRegistro;
  }

  static async obtenerTodos() {
    try {
      const respuesta = await metodosFetch.get({
        archivo: "controllers/empresaController",
        parametros: {
          accion: "obtenerTodos",
        },
        loader: false,
      });

      return respuesta;
    } catch (err) {
      throw err;
    }
  }

  async guardar() {
    try {
      const respuesta = await metodosFetch.post({
        archivo: "controllers/empresaController",
        data: {
          accion: "guardar",
          ...this,
        },
      });

      return respuesta;
    } catch (err) {
      throw err;
    }
  }

  static async obtenerRubros({ id }) {
    try {
      const respuesta = await metodosFetch.get({
        archivo: "controllers/empresaController",
        parametros: {
          accion: "obtenerRubros",
          id: btoa(id),
        },
      });

      return respuesta;
    } catch (err) {
      throw err;
    }
  }

  static async obtenerModulos({ id }) {
    try {
      const respuesta = await metodosFetch.get({
        archivo: "controllers/empresaController",
        parametros: {
          accion: "obtenerModulos",
          id: btoa(id),
        },
      });

      return respuesta;
    } catch (err) {
      throw err;
    }
  }

  static async obtenerPorModulo({ idModulo = 0 }) {
    try {
      const respuesta = await metodosFetch.get({
        archivo: "controllers/empresaController",
        parametros: {
          accion: "obtenerPorModulo",
          idModulo: btoa(idModulo),
        },
      });

      return respuesta;
    } catch (err) {
      throw err;
    }
  }

  static async obtenerPorUsuarioModulo({
    idUsuario = 0,
    idModulo = 0,
    idSuperior = 0,
    rubros = [],
  }) {
    try {
      let urlRubros = rubros.join("@@@");

      const respuesta = await metodosFetch.get({
        archivo: "controllers/empresaController",
        parametros: {
          accion: "obtenerPorUsuarioModulo",
          idUsuario: btoa(idUsuario),
          idModulo: idModulo,
          idSuperior: idSuperior,
          rubros: urlRubros,
        },
        loader: false,
      });

      return respuesta;
    } catch (err) {
      throw err;
    }
  }
}

export default Empresa;
