import { describe, expect, it } from 'vitest'
import {
  InvalidFieldKeyError,
  UnknownLocaleError,
  isI18nContentError,
} from './errors.js'

describe('i18n-content errors', () => {
  it('UnknownLocaleError passes isI18nContentError', () => {
    expect(isI18nContentError(new UnknownLocaleError('fr'))).toBe(true)
  })

  it('InvalidFieldKeyError passes isI18nContentError', () => {
    expect(isI18nContentError(new InvalidFieldKeyError('bad!'))).toBe(true)
  })

  it('plain object with _tag passes isI18nContentError (structural guard across copies)', () => {
    expect(
      isI18nContentError({ _tag: 'I18nContentError', code: 'X', message: 'x' }),
    ).toBe(true)
  })

  it('plain Error does not pass isI18nContentError', () => {
    expect(isI18nContentError(new Error('x'))).toBe(false)
  })

  it('null and undefined do not pass isI18nContentError', () => {
    expect(isI18nContentError(null)).toBe(false)
    expect(isI18nContentError(undefined)).toBe(false)
  })

  it('UnknownLocaleError has locale property', () => {
    expect(new UnknownLocaleError('fr').locale).toBe('fr')
  })

  it('InvalidFieldKeyError has key property', () => {
    expect(new InvalidFieldKeyError('bad!').key).toBe('bad!')
  })

  it('UnknownLocaleError has correct name', () => {
    expect(new UnknownLocaleError('fr').name).toBe('UnknownLocaleError')
  })

  it('InvalidFieldKeyError has correct name', () => {
    expect(new InvalidFieldKeyError('bad!').name).toBe('InvalidFieldKeyError')
  })
})
