import { ReactNode, useCallback, useMemo } from 'react';
import { useNavigate } from 'react-router-dom';
import { NavigationContext } from '@/contexts/NavigationContext.tsx';
import { organizationSchema } from '@/schemas/organization.ts';
import { Organization } from '@/types.ts';

export const NavigationProvider = ({ children }: { children?: ReactNode }) => {
  const navigate = useNavigate();

  const viewOrganization = useCallback(
    (org: Organization) => {
      const parsedOrg = organizationSchema.parse(org);
      navigate(`/organization/${parsedOrg.ID}`);
      window.scrollTo(0, 0);
    },
    [navigate]
  );

  const handleBackNavigation = useCallback(() => {
    navigate(-1);
  }, [navigate]);

  const handleFooterNavigate = useCallback(
    (path: string) => {
      navigate(path);
      window.scrollTo(0, 0);
    },
    [navigate]
  );

  const value = useMemo(
    () => ({
      viewOrganization,
      handleBackNavigation,
      handleFooterNavigate,
    }),
    [viewOrganization, handleBackNavigation, handleFooterNavigate]
  );

  return <NavigationContext.Provider value={value}>{children}</NavigationContext.Provider>;
};
