import { deserializeWithContextAndRun, isSerializedFunction } from '@win2win/shared';
import { Screen } from 'quasar';
import { useAuth } from 'src/composables/useAuth';
import { computed, provide } from 'vue';
import { useRoute } from 'vue-router';

export function useContextParams() {
  const isMobileSize = computed(() => Screen.lt.md);
  const route = useRoute();
  const { idDelegacionActiva, perfil, userData, rol } = useAuth();
  const contextParams = computed(() => ({
    idDelegacion: idDelegacionActiva.value,
    idGerencia: userData.value.gerencia_pred,
    idUsuario: userData.value.id_usuario,
    idContacto: userData.value.id_contacto,
    perfil: perfil.value,
    rol: rol.value,
    isMobileSize: isMobileSize.value,
    route: route.path,
  }));

  provide('contextParams', contextParams);

  const isVisible = (visibilityFn?: string) => {
    if (!visibilityFn || !isSerializedFunction(visibilityFn)) return true;
    return deserializeWithContextAndRun(visibilityFn, contextParams.value);
  };

  return { contextParams, isVisible };
}
