"use client";

import { getMe, getWorkshops, type User, type UserGroup } from "@/lib/api/labs";
import type { DefinedUseQueryResult } from "@tanstack/react-query";
import { useQuery } from "@tanstack/react-query";
import { createContext, ReactNode, useContext } from "react";

export const MeContext = createContext<DefinedUseQueryResult<User | null>>(
  null as never
);
export const UserGroupsContext = createContext<UserGroup[]>([]);

export function MeProvider({
  user,
  children,
}: {
  user: User | null;
  children: ReactNode;
}) {
  const query = useQuery({
    queryKey: ["user.me"],
    queryFn: () => getMe(),
    initialData: user,
    staleTime: 30000,
    refetchOnMount: "always",
    retry: false,
  });

  return <MeContext value={query}>{children}</MeContext>;
}

export function UserGroupsProvider({
  userGroups,
  children,
}: {
  userGroups: UserGroup[];
  children: ReactNode;
}) {
  return <UserGroupsContext value={userGroups}>{children}</UserGroupsContext>;
}

export function useMe() {
  return useContext(MeContext);
}

export function useUserGroups() {
  return useContext(UserGroupsContext);
}

export function useMyWorkshops() {
  const { data: me } = useMe();
  return useQuery({
    queryKey: ["user.me.workshops", me?.id],
    queryFn: () => getWorkshops(),
    enabled: !!me?.id,
  });
}
