/**
 * Setup global para tests
 */
import { vi } from 'vitest';

// Mock de next-auth
vi.mock('next-auth', () => ({
  default: vi.fn(),
  getServerSession: vi.fn(),
}));

// Mock de authOptions
vi.mock('../app/api/auth/[...nextauth]/route', () => ({
  authOptions: {
    providers: [],
    callbacks: {},
    pages: {},
    session: { strategy: 'jwt' },
  },
}));

// Mock de bcrypt
vi.mock('bcrypt', () => ({
  default: {
    hash: vi.fn((password: string) => Promise.resolve(`hashed_${password}`)),
    compare: vi.fn((password: string, hash: string) => 
      Promise.resolve(hash === `hashed_${password}`)
    ),
  },
}));

// Mock de fs/promises
vi.mock('fs/promises', () => ({
  writeFile: vi.fn(() => Promise.resolve()),
  unlink: vi.fn(() => Promise.resolve()),
  readFile: vi.fn(() => Promise.resolve(Buffer.from('mock file content'))),
  mkdir: vi.fn(() => Promise.resolve()),
}));

// Mock de path
vi.mock('path', () => ({
  join: vi.fn((...args: string[]) => args.join('/')),
}));

// Mock de uuid
vi.mock('uuid', () => ({
  v4: vi.fn(() => 'mock-uuid-1234'),
}));
