import { create } from "zustand";

import {
  EliminarPermisos,
  MostrarPermisos,
  MostrarPermisosDefault,
  MostrarPermisosGlobales,
} from "../supabase/crudPermisos";

// Módulos de configuración hardcodeados temporalmente
// TODO: Migrar a backend NestJS cuando se implemente el módulo de permisos
const MODULOS_CONFIGURACION = [
  {
    id: "1",
    modulos: {
      id: "1",
      nombre: "Empresa",
      descripcion: "Configuración de empresa",
      link: "/configuracion/empresa",
      icono: "https://cdn-icons-png.flaticon.com/512/2910/2910791.png",
      state: true,
      etiquetas: "#configuracion",
    },
  },
  {
    id: "2",
    modulos: {
      id: "2",
      nombre: "Sucursales y Cajas",
      descripcion: "Gestión de sucursales y cajas",
      link: "/configuracion/sucursalcaja",
      icono: "https://cdn-icons-png.flaticon.com/512/1670/1670080.png",
      state: true,
      etiquetas: "#configuracion",
    },
  },
  {
    id: "3",
    modulos: {
      id: "3",
      nombre: "Usuarios",
      descripcion: "Gestión de usuarios",
      link: "/configuracion/usuarios",
      icono: "https://cdn-icons-png.flaticon.com/512/1077/1077114.png",
      state: true,
      etiquetas: "#configuracion",
    },
  },
  {
    id: "6",
    modulos: {
      id: "6",
      nombre: "Métodos de Pago",
      descripcion: "Configuración de métodos de pago",
      link: "/configuracion/metodospago",
      icono: "https://cdn-icons-png.flaticon.com/512/633/633611.png",
      state: true,
      etiquetas: "#configuracion",
    },
  } /*
  {
    id: "7",
    modulos: {
      id: "7",
      nombre: "Impresoras",
      descripcion: "Configuración de impresoras",
      link: "/configuracion/impresoras",
      icono: "https://cdn-icons-png.flaticon.com/512/2358/2358854.png",
      state: true,
      etiquetas: "#configuracion",
    },
  },
  {
    id: "8",
    modulos: {
      id: "8",
      nombre: "Ticket",
      descripcion: "Configuración de ticket",
      link: "/configuracion/ticket",
      icono: "https://cdn-icons-png.flaticon.com/512/1611/1611179.png",
      state: true,
      etiquetas: "#configuracion",
    },
  },*/,
  {
    id: "9",
    modulos: {
      id: "9",
      nombre: "Almacenes",
      descripcion: "Gestión de almacenes/depósitos",
      link: "/configuracion/almacenes",
      icono: "https://cdn-icons-png.flaticon.com/512/1554/1554591.png",
      state: true,
      etiquetas: "#configuracion",
    },
  },
];

export const usePermisosStore = create((set, get) => ({
  datapermisos: [],
  selectedModules: [],
  setSelectedModules: (p) => set({ selectedModules: p }),
  toggleModule: (moduleId) => {
    const { selectedModules, datapermisos } = get();
    let updatedModules;
    let updatedPermisos;

    if (selectedModules.includes(moduleId)) {
      updatedModules = selectedModules.filter((id) => id !== moduleId);
      updatedPermisos = datapermisos.filter((p) => p.idmodulo !== moduleId);
    } else {
      updatedModules = [...selectedModules, moduleId];
      updatedPermisos = [...datapermisos, { idmodulo: moduleId }];
    }

    set({
      selectedModules: updatedModules,
      datapermisos: updatedPermisos,
    });
  },

  mostrarPermisos: async (p) => {
    const response = await MostrarPermisos(p);
    set({ datapermisos: response });
    return response;
  },
  mostrarPermisosDefault: async () => {
    const response = MostrarPermisosDefault();
    return response;
  },
  eliminarPermisos: async (p) => {
    await EliminarPermisos(p);
  },
  actualizarPermisos: async () => {
    // TODO: Implementar cuando se migre a backend
  },
  dataPermisosGlobales: null,
  mostrarPermisosGlobales: async (p) => {
    const response = await MostrarPermisosGlobales(p);
    set({ dataPermisosGlobales: response });
    return response;
  },
  dataPermisosConfiguracion: [],
  mostrarPermisosConfiguracion: async () => {
    // Retorna módulos hardcodeados en lugar de consultar Supabase
    set({ dataPermisosConfiguracion: MODULOS_CONFIGURACION });
    return MODULOS_CONFIGURACION;
  },
}));
