import { render, screen } from '@testing-library/react'
import { afterEach, describe, expect, test, vi } from 'vitest'

import { EXAMPLE_HEADER_FOOTER_DATA } from 'shared-utils/header-footer'
import type { IPktFooterLink } from 'shared-types'
import { PktFooterSimple } from './FooterSimple'

const LINKS: IPktFooterLink[] = [
  { text: 'Lenke 1', href: 'https://example.test/lenke-1' },
  { text: 'Lenke 2', href: 'https://example.test/lenke-2', external: true },
]

afterEach(() => {
  vi.restoreAllMocks()
})

describe('PktFooterSimple', () => {
  test('rendrer kompakt lenkerad med pil-ikoner + global footer', () => {
    const { container } = render(<PktFooterSimple links={LINKS} data={EXAMPLE_HEADER_FOOTER_DATA} />)
    const links = [...container.querySelectorAll('.pkt-footer-simple__link')]
    expect(links).toHaveLength(2)
    expect(links[0].querySelector('.pkt-footer-simple__link-icon')).not.toBeNull()
    expect(container.querySelector('.pkt-footer__band--global')).not.toBeNull()
  })

  test('rendrer kun global footer uten links', () => {
    const { container } = render(<PktFooterSimple data={EXAMPLE_HEADER_FOOTER_DATA} />)
    expect(container.querySelector('.pkt-footer-simple .pkt-footer__band--secondary')).toBeNull()
    expect(container.querySelector('.pkt-footer__band--global')).not.toBeNull()
  })

  test('eksterne lenker viser toppdomenet i parentes', () => {
    render(<PktFooterSimple links={LINKS} data={EXAMPLE_HEADER_FOOTER_DATA} />)
    const external = screen.getByRole('link', { name: /Lenke 2/ })
    expect(external.querySelector('.pkt-footer-simple__link-domain')?.textContent?.trim()).toBe('(example.test)')
  })

  test('skipGlobal dropper global footer og henter ikke data', () => {
    const fetchSpy = vi.spyOn(globalThis, 'fetch').mockRejectedValue(new Error('should not run'))
    const { container } = render(<PktFooterSimple links={LINKS} skipGlobal />)
    expect(container.querySelector('.pkt-footer__band--global')).toBeNull()
    expect(container.querySelector('.pkt-footer-simple .pkt-footer__band--secondary')).not.toBeNull()
    expect(fetchSpy).not.toHaveBeenCalled()
  })

  test('consent rendres som listepunkt ved skipGlobal + includeConsent', () => {
    const { container } = render(<PktFooterSimple links={LINKS} skipGlobal includeConsent />)
    const consent = container.querySelector('.pkt-footer-simple__list a.pkt-footer__link')
    expect(consent).not.toBeNull()
  })

  test('openLinksInNewTab åpner lenker i ny fane', () => {
    render(<PktFooterSimple links={LINKS} data={EXAMPLE_HEADER_FOOTER_DATA} openLinksInNewTab />)
    const link = screen.getByRole('link', { name: 'Lenke 1' })
    expect(link).toHaveAttribute('target', '_blank')
    expect(link).toHaveAttribute('rel', 'noopener noreferrer')
  })
})
