import { useState } from 'react';
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { interviewsApi } from '@/services/api';
import { handleApiError, handleApiSuccess } from '@/services/helpers/toast.helpers';

export function useInterviews() {
  const qc = useQueryClient();
  const [page, setPage] = useState(1);
  const [pageSize, setPageSize] = useState(10);
  const [filters, setFilters] = useState<Record<string, string>>({});

  const query = useQuery({
    queryKey: ['interviews', page, pageSize, filters],
    queryFn: () => interviewsApi.getAll({ page, limit: pageSize, ...filters }),
  });

  const rescheduleMutation = useMutation({
    mutationFn: ({ id, data }: { id: string; data: Parameters<typeof interviewsApi.reschedule>[1] }) =>
      interviewsApi.reschedule(id, data),
    onSuccess: (result) => {
      handleApiSuccess(result.data);
      qc.invalidateQueries({ queryKey: ['interviews'] });
    },
    onError: (err) => handleApiError(err, 'Failed to reschedule interview'),
  });

  const cancelMutation = useMutation({
    mutationFn: (id: string) => interviewsApi.cancel(id),
    onSuccess: (result) => {
      handleApiSuccess(result.data);
      qc.invalidateQueries({ queryKey: ['interviews'] });
    },
    onError: (err) => handleApiError(err, 'Failed to cancel interview'),
  });

  const createMutation = useMutation({
    mutationFn: (data: Parameters<typeof interviewsApi.create>[0]) => interviewsApi.create(data),
    onSuccess: (result) => {
      handleApiSuccess(result);
      qc.invalidateQueries({ queryKey: ['interviews'] });
    },
    onError: (err) => handleApiError(err, 'Failed to schedule interview'),
  });

  const handleFilterChange = (key: string, value: string) => {
    setFilters((prev) => {
      const next = { ...prev };
      if (value) next[key] = value;
      else delete next[key];
      return next;
    });
    setPage(1);
  };

  return {
    data: query.data,
    isLoading: query.isLoading,
    page, setPage, pageSize, setPageSize,
    filters, handleFilterChange,
    refetch: query.refetch,
    create: createMutation.mutate,
    isCreating: createMutation.isPending,
    reschedule: rescheduleMutation.mutate,
    isRescheduling: rescheduleMutation.isPending,
    cancel: cancelMutation.mutate,
    isCancelling: cancelMutation.isPending,
  };
}
