"use client";

import { useMutation } from "@tanstack/react-query";
import { useRouter } from "next/navigation";
import { TLoginRequest, TAuthResponse } from "@/services/types/auth.types";
import { useDispatch } from "react-redux";
import { setUser } from "@/store/auth/authSlice";
import { authUtils } from "@/lib/auth-utils";
import { apiClient } from "@/lib/api-client";
import { toast } from "sonner";

export const useLoginMutation = () => {
  const router = useRouter();
  const dispatch = useDispatch();

  return useMutation<TAuthResponse, Error, TLoginRequest>({
    mutationFn: async (variables: TLoginRequest) => {
      const { username, password } = variables;
      return await apiClient.post<TAuthResponse>("/api/accounts/login/", {
        body: { username, password },
        skipAuth: true,
      });
    },
    onSuccess: (data: TAuthResponse) => {
      // Set tokens first
      authUtils.setTokens(data.access, data.refresh);

      // Set user data in Redux
      dispatch(setUser(data.user));

      if (data.user.required_change_password) {
        toast.success("Login successful!");
      }
      toast.success("Login successful!");

      // Redirect to home
      router.replace('/');
    },
    onError: (error: Error) => {
      toast.error(`Login failed: ${error.message}`);
      // Clear any existing tokens on error
      authUtils.clearTokens();
    },
  });
};
