import api from "@/lib/api";
import { useMutation, useQuery } from "@tanstack/react-query";
import { InviteSchema, TeamFormSchema } from "../schema/team-form";
import queryClient from "@/lib/queryClient";
import { setTeam, useTeamId } from "@/stores/auth";
import { router } from "expo-router";

export const useTeams = () => {
  return useQuery({
    queryKey: ["teams"],
    queryFn: () => api("/teams"),
    select: (i) => i.rows,
  });
};

export const useTeam = () => {
  const teamId = useTeamId();
  return useQuery({
    queryKey: ["teams", teamId],
    queryFn: () => api(`/teams/${teamId}`),
  });
};

export const useSaveTeam = () => {
  return useMutation({
    mutationFn: async (body: TeamFormSchema) => {
      return body.id
        ? api(`/teams/${body.id}`, { method: "PUT", body })
        : api(`/teams`, { method: "POST", body });
    },
    onError: (e) => console.error(e),
    onSuccess: (res, body) => {
      queryClient.invalidateQueries({ queryKey: ["teams"] });

      if (!body.id && res.id) {
        setTeam(res.id);
        router.push("/team");
      }
    },
  });
};

export const useInviteMutation = (teamId: string | null) => {
  return useMutation({
    mutationFn: async (body: InviteSchema) => {
      return api(`/teams/${teamId}/invite`, { method: "POST", body });
    },
    onError: (e) => console.error(e),
    onSuccess: () => {
      queryClient.invalidateQueries({ queryKey: ["teams", teamId] });
    },
  });
};