import { describe, expect, it } from 'vitest'
import { z } from 'zod'
import { createZodErrorMap } from './zod'

const msgs = {
  required: 'שדה חובה',
  invalid_type: 'ערך לא חוקי',
  too_small_string: 'קצר מדי',
  too_big_string: 'ארוך מדי',
  too_small_number: 'קטן מדי',
  too_big_number: 'גדול מדי',
  invalid_string_email: 'אימייל לא חוקי',
  invalid_string_url: 'כתובת לא חוקית',
  invalid_enum_value: 'ערך לא מורשה',
  invalid_date: 'תאריך לא חוקי',
  custom: 'קלט לא חוקי',
} as const

describe('createZodErrorMap', () => {
  it('localizes a required-field issue via messages table', () => {
    const schema = z.string()
    const parsed = schema.safeParse(undefined, { error: createZodErrorMap(msgs) })
    expect(parsed.success).toBe(false)
    if (!parsed.success) {
      expect(parsed.error.issues[0]?.message).toBe('שדה חובה')
    }
  })

  it('accepts a translate function instead of a messages table', () => {
    const schema = z.string().email()
    const parsed = schema.safeParse('nope', {
      error: createZodErrorMap((key) => (key === 'invalid_string_email' ? 'Bad email' : key)),
    })
    expect(parsed.success).toBe(false)
    if (!parsed.success) {
      expect(parsed.error.issues[0]?.message).toBe('Bad email')
    }
  })
})
