import { useEffect } from 'react';
import { useDispatch } from 'react-redux';
import {
  markContactAsRead,
  quitContactTask,
  recoverContactTask,
  deleteContactTask,
  moveContactTask,
  cloneContactTask,
  fetchContactAufgaben,
} from '../../contactAufgabenSlice';
// import { clearTable } from '../../../DataPage/tableSlice';
// import { fetchEmails } from '../../../DataPage/emailsSlice';

export function useAufgabenEventHandlers(contactId: number) {
  const dispatch = useDispatch();

  // Mark as read
  useEffect(() => {
    const handleMarkAsRead = (e: CustomEvent) => {
      const ergId = e.detail?.ergId;
      if (!ergId) return;

      console.log('🔵 ContactsPage intercepted MarkAsRead action for task:', ergId);

      dispatch(markContactAsRead(ergId))
        .unwrap()
        .then(() => console.log('✅ Task marked as read'))
        .catch((err) => console.error('❌ Mark as read failed:', err));
    };

    window.addEventListener('contactMarkAsRead', handleMarkAsRead as EventListener);
    return () => window.removeEventListener('contactMarkAsRead', handleMarkAsRead as EventListener);
  }, [dispatch, contactId]);

  // Task updated (after form submission)
  useEffect(() => {
    const handleTaskUpdate = () => {
      // dispatch(clearTable());
      dispatch(fetchContactAufgaben(contactId));
    };

    window.addEventListener('taskUpdated', handleTaskUpdate);
    return () => window.removeEventListener('taskUpdated', handleTaskUpdate);
  }, [dispatch, contactId]);

  // Quit task
  useEffect(() => {
    const handleQuit = (e: CustomEvent) => {
      const ergId = e.detail?.ergId;
      if (!ergId) return;

      console.log('🔵 ContactsPage intercepted Quit action for task:', ergId);

      dispatch(quitContactTask(ergId))
        .unwrap()
        .then(() => {
          console.log('✅ Task quit successful, refreshing...');
          dispatch(fetchContactAufgaben(contactId));
        })
        .catch((err) => console.error('❌ Quit failed:', err));
    };

    window.addEventListener('contactQuitTask', handleQuit as EventListener);
    return () => window.removeEventListener('contactQuitTask', handleQuit as EventListener);
  }, [dispatch, contactId]);

  // Recover task
  useEffect(() => {
    const handleRecover = (e: CustomEvent) => {
      const ergId = e.detail?.ergId;
      if (!ergId) return;

      console.log('🔵 ContactsPage intercepted Recover action for task:', ergId);

      dispatch(recoverContactTask(ergId))
        .unwrap()
        .then(() => {
          console.log('✅ Task recovered, refreshing...');
          dispatch(fetchContactAufgaben(contactId));
        })
        .catch((err) => console.error('❌ Recover failed:', err));
    };

    window.addEventListener('contactRecoverTask', handleRecover as EventListener);
    return () => window.removeEventListener('contactRecoverTask', handleRecover as EventListener);
  }, [dispatch, contactId]);

  // Delete task
  useEffect(() => {
    const handleDelete = (e: CustomEvent) => {
      const ergId = e.detail?.ergId;
      if (!ergId) return;

      console.log('🔵 ContactsPage intercepted Delete action for task:', ergId);

      dispatch(deleteContactTask(ergId))
        .unwrap()
        .then(() => {
          console.log('✅ Task deleted, refreshing...');
          dispatch(fetchContactAufgaben(contactId));
        })
        .catch((err) => console.error('❌ Delete failed:', err));
    };

    window.addEventListener('contactDeleteTask', handleDelete as EventListener);
    return () => window.removeEventListener('contactDeleteTask', handleDelete as EventListener);
  }, [dispatch, contactId]);

  // Move task
  useEffect(() => {
    const handleMove = (e: CustomEvent) => {
      const { ergId, newDate } = e.detail || {};
      if (!ergId || !newDate) return;

      console.log('🔵 ContactsPage intercepted Move action for task:', ergId, 'to', newDate);

      dispatch(moveContactTask({ ergId, newDate }))
        .unwrap()
        .then(() => {
          console.log('✅ Task moved, refreshing...');
          dispatch(fetchContactAufgaben(contactId));
        })
        .catch((err) => console.error('❌ Move failed:', err));
    };

    window.addEventListener('contactMoveTask', handleMove as EventListener);
    return () => window.removeEventListener('contactMoveTask', handleMove as EventListener);
  }, [dispatch, contactId]);

  // Clone task
  useEffect(() => {
    const handleClone = (e: CustomEvent) => {
      const { ergId, cloneIds } = e.detail || {};
      if (!ergId || !cloneIds) return;

      console.log('🔵 ContactsPage intercepted Clone action for task:', ergId, 'clones:', cloneIds);

      dispatch(cloneContactTask({ ergId, cloneIds }))
        .unwrap()
        .then(() => {
          console.log('✅ Task cloned, refreshing...');
          dispatch(fetchContactAufgaben(contactId));
        })
        .catch((err) => console.error('❌ Clone failed:', err));
    };

    window.addEventListener('contactCloneTask', handleClone as EventListener);
    return () => window.removeEventListener('contactCloneTask', handleClone as EventListener);
  }, [dispatch, contactId]);

  // Fetch emails (optional, shared Redux works)
  useEffect(() => {
    const handleFetchEmails = (e: CustomEvent) => {
      const ergId = e.detail?.ergId;
      if (!ergId) return;

      console.log('🔵 ContactsPage intercepted FetchEmails action for task:', ergId);
      dispatch(fetchEmails(ergId));
    };

    window.addEventListener('contactFetchEmails', handleFetchEmails as EventListener);
    return () => window.removeEventListener('contactFetchEmails', handleFetchEmails as EventListener);
  }, [dispatch]);
}