import { Dispatch, useEffect } from "react";
import { api } from "../API/API";

export interface ProjectMember {
  Username: string;
  UserRole: string;
}

/**
 * Gets all members of a project
 * @param string - The project's name
 * @param Dispatch - A setStateAction for the array you want to put members in
 * @returns {void} Nothing
 * @example
 * const [users, setUsers] = useState<User[]>([]);
 * GetUsersInProject({ projectName: props.projectname, setUsersProp: setUsers });
 */
function GetUsersInProject(props: {
  projectName: string;
  setUsersProp: Dispatch<React.SetStateAction<ProjectMember[]>>;
}): void {
  const setUsers: Dispatch<React.SetStateAction<ProjectMember[]>> =
    props.setUsersProp;
  useEffect(() => {
    const fetchUsers = async (): Promise<void> => {
      try {
        const token = localStorage.getItem("accessToken") ?? "";
        const response = await api.getAllUsersProject(props.projectName, token);
        if (response.success) {
          setUsers(response.data ?? []);
        } else {
          console.error("Failed to fetch members:", response.message);
        }
      } catch (error) {
        console.error("Error fetching members:", error);
      }
    };
    void fetchUsers();
  }, [props.projectName, setUsers]);
}

export default GetUsersInProject;
