import { useMutation, useQuery } from "@tanstack/react-query";
import { organizationService } from "../services/organization.service";
import { CreateOrganizationPayload, UpdateOrganizationPayload } from "../types/organization.type";
import { showToast } from "@/lib/toast";
import { setCurrentUser } from "@/modules/auth/slices/authSlice";
import { TokenService } from "@/lib/axios";
import { useAppDispatch } from "@/lib/store";

export const useGetOrganization = () => {
  return useQuery({
    queryKey: ["organization"],
    queryFn: () => organizationService.getOrganization(),
    select: (res) => res.data,
  });
};

export const useCreateOrganization = (onSuccess?: () => void) => {
  const dispatch = useAppDispatch();

  return useMutation({
    mutationFn: (payload: CreateOrganizationPayload) =>
      organizationService.createOrganization(payload),
    onSuccess: (res) => {
      const { accessToken, refreshToken, user } = res.data as any;

      // Save fresh tokens BEFORE navigating, not after
      if (accessToken && refreshToken) {
        TokenService.setTokens(accessToken, refreshToken);
      }

      // Update Redux so organizationId reflects immediately in the UI
      if (user) {
        dispatch(setCurrentUser(user));
      }

      showToast.success(res.message || "Organization created successfully!");
      onSuccess?.();
    },
    onError: (error: any) => {
      showToast.error(error?.response?.data?.error || "Failed to create organization");
    },
  });
};

export const useUpdateOrganization = (onSuccess?: () => void) => {
  return useMutation({
    mutationFn: (payload: UpdateOrganizationPayload) =>
      organizationService.updateOrganization(payload),
    onSuccess: (res) => {
      showToast.success(res.message || "Organization updated successfully!");
      onSuccess?.();
    },
    onError: (error: any) => {
      showToast.error(error?.response?.data?.message || "Failed to update organization");
    },
  });
};
