import type { ShortcutDef } from '$lib/stores/shortcut-store';

/**
 * Reusable shortcuts for simple catalogs with a standard list and a create/edit dialog.
 */
export const obtenerAtajosCatalogoSimple = (acciones: {
    manejarNuevo: () => void;
    manejarActualizar: () => void;
    manejarEditar?: () => void;
    manejarEliminar?: () => void;
}): ShortcutDef[] => {
    const atajos: ShortcutDef[] = [
        {
            key: 'Alt+Shift+N',
            description: 'Nuevo Registro',
            action: acciones.manejarNuevo
        },
        {
            key: 'Alt+Shift+R',
            description: 'Actualizar Lista',
            action: acciones.manejarActualizar
        }
    ];

    if (acciones.manejarEditar) {
        atajos.push({
            key: 'Alt+Shift+E',
            description: 'Editar Seleccionado',
            action: acciones.manejarEditar
        });
    }

    if (acciones.manejarEliminar) {
        atajos.push({
            key: 'Alt+Shift+D',
            description: 'Eliminar Seleccionado',
            action: acciones.manejarEliminar
        });
    }

    return atajos;
};

/**
 * Reusable shortcuts for dialogs/forms within catalogs.
 */
export const obtenerAtajosDialogoCatalogo = (acciones: {
    manejarGuardar: () => void;
    manejarCerrar: () => void;
    cambiarPestana?: (pestana: string) => void;
    pestanas?: string[];
}): ShortcutDef[] => {
    const atajos: ShortcutDef[] = [
        {
            key: 'Ctrl+S',
            description: 'Guardar',
            action: () => acciones.manejarGuardar()
        },
        {
            key: 'Escape',
            description: 'Cerrar / Cancelar',
            action: acciones.manejarCerrar
        }
    ];

    // Add Alt+DigitN for tab switching if applicable
    if (acciones.cambiarPestana && acciones.pestanas) {
        acciones.pestanas.forEach((pestana, index) => {
            const digit = index + 1;
            if (digit <= 9) {
                atajos.push({
                    key: `Alt+Digit${digit}`,
                    description: `Pestaña ${pestana}`,
                    action: () => acciones.cambiarPestana!(pestana)
                });
            }
        });
    }

    return atajos;
};
