import { z, ZodSchema, ZodType } from 'zod';
import { DynamicEvent } from '../useDynamicEvents';

export const getParsePayload = <T extends Record<string, ZodSchema>>(schemas: Record<string, ZodType<any>>) => {
  return <Code extends keyof T>(event: DynamicEvent) => {
    const { code, payload } = event;
    const schema = schemas[code];
    if (!schema) {
      throw new Error(`Acción no soportada: ${code}`);
    }
    const result = schema.safeParse(payload);
    if (result.error) {
      console.error(`Error parsing event payload for code ${code}:`, result.error);
      throw new Error(result.error.message);
    }
    return result.data as z.infer<T[Code]>;
  };
};
