import { PropsWithChildren, createContext } from "react";

/**
 * ────────────────────────────────────────────────────────────────────────────────
 * 💡 Posibles usos del Context
 * ────────────────────────────────────────────────────────────────────────────────
 * Este contexto se diseña para encapsular estado y lógica compartida dentro del
 * bounded context de facturación (facturas), proporcionando acceso global a datos
 * o funciones relevantes para múltiples vistas (listado, detalle, edición, etc).
 *
 * ✅ Usos recomendados:
 *
 * 1. 🔎 Gestión de filtros globales:
 *    - Permite que los filtros aplicados en el listado de facturas se conserven
 *      cuando el usuario navega a otras vistas (detalle, edición) y luego regresa.
 *    - Mejora la experiencia de usuario evitando la necesidad de reestablecer filtros.
 *
 * 2. 🛡️ Gestión de permisos o configuración de acciones disponibles:
 *    - Permite definir qué acciones están habilitadas para el usuario actual
 *      (crear, editar, eliminar).
 *    - Útil para mostrar u ocultar botones de acción en diferentes pantallas.
 *
 * 3. 🧭 Control del layout:
 *    - Si el layout tiene elementos dinámicos (tabs, breadcrumb, loading global),
 *      este contexto puede coordinar su estado desde componentes hijos.
 *    - Ejemplo: seleccionar una pestaña activa que aplica en todas las subrutas.
 *
 * 4. 📦 Cacheo liviano de datos compartidos:
 *    - Puede almacenar la última factura abierta, borradores de edición,
 *      o referencias temporales para operaciones CRUD sin tener que usar la URL.
 *
 * 5. 🚀 Coordinación de side-effects:
 *    - Permite exponer funciones comunes como `refetch`, `resetFilters`,
 *      o `notifyInvoiceChanged`, usadas desde cualquier subcomponente del dominio.
 *
 * ⚠️ Alternativas:
 *    - Si el estado compartido es muy mutable, grande o requiere persistencia,
 *      podría ser preferible usar Zustand o Redux Toolkit.
 *    - No usar contextos para valores que cambian frecuentemente en tiempo real,
 *      ya que pueden causar renders innecesarios.
 *
 * ────────────────────────────────────────────────────────────────────────────────
 */

export type CustomersContextType = {};

export type CustomersContextParamsType = {
  //service: CustomerApplicationService;
};

export const CustomersContext = createContext<CustomersContextType>({});

export const CustomersProvider = ({ children }: PropsWithChildren) => {
  return <CustomersContext.Provider value={{}}>{children}</CustomersContext.Provider>;
};
