import '@testing-library/jest-dom/vitest'
import { afterEach, vi } from 'vitest'
import { cleanup } from '@testing-library/react'

// @nstart/ui тянет lottie-web (анимация brand-стикеров) prebuilt; lottie при
// импорте инициализирует CanvasRenderingContext, в jsdom его нет → крах
// "Cannot set properties of null (setting fillStyle)". vi.mock не ловит т.к.
// lottie уже вшит в bundle. Стабим прямо HTMLCanvasElement.getContext —
// возвращаем no-op 2D-context, lottie доволен и init не падает.
if (typeof HTMLCanvasElement !== 'undefined' && !HTMLCanvasElement.prototype.getContext) {
  // безопасная проверка для любой среды
}
HTMLCanvasElement.prototype.getContext = (() => {
  const noop = () => {}
  const ctx = new Proxy(
    {},
    {
      get: (target: Record<string, unknown>, prop: string) => {
        if (prop in target) return target[prop]
        if (
          prop === 'measureText'
        ) {
          return () => ({ width: 0 })
        }
        if (prop === 'getImageData') {
          return () => ({ data: new Uint8ClampedArray(4) })
        }
        if (prop === 'createImageData') {
          return () => ({ data: new Uint8ClampedArray(4) })
        }
        return noop
      },
      set: (target: Record<string, unknown>, prop: string, value: unknown) => {
        target[prop] = value
        return true
      },
    },
  )
  return () => ctx as unknown as CanvasRenderingContext2D
}) () as never
// нет требований к unused vi импорту
void vi

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

if (!('matchMedia' in window)) {
  Object.defineProperty(window, 'matchMedia', {
    writable: true,
    value: (q: string) => ({
      matches: false,
      media: q,
      addEventListener: () => {},
      removeEventListener: () => {},
      addListener: () => {},
      removeListener: () => {},
      dispatchEvent: () => false,
      onchange: null,
    }),
  })
}
