import { vi } from 'vitest';

/**
 * Mock NextAuth
 */
export const mockNextAuth = {
  useSession: vi.fn(() => ({
    data: {
      user: {
        id: '1',
        name: 'Test User',
        email: 'test@example.com',
        image: 'https://example.com/avatar.jpg',
      },
      expires: '2026-12-31',
    },
    status: 'authenticated',
  })),
  signIn: vi.fn(),
  signOut: vi.fn(),
  getSession: vi.fn(),
  getCsrfToken: vi.fn(),
  getProviders: vi.fn(),
};

/**
 * Setup NextAuth mock
 */
export const setupNextAuthMock = () => {
  vi.mock('next-auth/react', () => mockNextAuth);
};

/**
 * Mock authenticated session
 */
export const mockAuthenticatedSession = {
  data: {
    user: {
      id: '1',
      name: 'Test User',
      email: 'test@example.com',
      image: 'https://example.com/avatar.jpg',
    },
    expires: '2026-12-31',
  },
  status: 'authenticated' as const,
};

/**
 * Mock unauthenticated session
 */
export const mockUnauthenticatedSession = {
  data: null,
  status: 'unauthenticated' as const,
};

/**
 * Mock loading session
 */
export const mockLoadingSession = {
  data: null,
  status: 'loading' as const,
};
