<script lang="ts">
  import { eventManager, type Events } from '$lib/managers/event-manager.svelte';
  import { onMount } from 'svelte';

  type Props = {
    [K in keyof Events as `on${K}`]?: (...args: Events[K]) => void;
  };

  const props: Props = $props();

  onMount(() => {
    const unsubscribes: Array<() => void> = [];

    for (const name of Object.keys(props)) {
      const event = name.slice(2) as keyof Events;
      const listener = props[name as keyof Props];

      if (!listener) {
        continue;
      }

      const args = [event, listener as (...args: Events[typeof event]) => void] as const;

      unsubscribes.push(eventManager.on(...args));
    }

    return () => {
      for (const unsubscribe of unsubscribes) {
        unsubscribe();
      }
    };
  });
</script>
