import { vi, afterEach } from 'vitest'
import { cleanup } from '@testing-library/react'
import * as wagmiMock from './__mocks__/wagmi'
import * as wagmiActionsMock from './__mocks__/wagmi/actions'
import * as rainbowkitMock from './__mocks__/@rainbow-me/rainbowkit'
import balanceMock from './__fixtures__/balance.json'
import '@testing-library/jest-dom'

// viem uses TextEncoder and TextDecoder which are not available with jsdom 16+
import { TextEncoder, TextDecoder } from 'node:util'
Object.assign(global, { TextDecoder, TextEncoder })

Object.defineProperty(window, 'localStorage', {
  value: {
    getItem: vi.fn(() => null),
    removeItem: vi.fn(() => null),
    setItem: vi.fn(() => null)
  },
  writable: true
})

vi.mock('wagmi', () => wagmiMock)
vi.mock('wagmi/actions', () => wagmiActionsMock)
vi.mock('@rainbow-me/rainbowkit', () => rainbowkitMock)
vi.mock('@features/Web3/hooks/useFetchTokens', () => ({
  useFetchTokens: () => ({ isLoading: false, data: balanceMock })
}))

// vi.mock('@features/Web3/stores', () => ({
//   $selectedToken: balanceMock[0],
//   $amount: '1'
// }))

afterEach(() => {
  cleanup()
})