import { describe, it, expect, vi } from 'vitest'
import { render, screen, fireEvent } from '@testing-library/react'
import HozzadasForm from '../components/HozzadasForm'

describe('HozzadasForm', () => {
  it('Hibák megjelennek üres submitnál', () => {
    const mockHozzaAd = vi.fn()
    render(<HozzadasForm hozzaAd={mockHozzaAd} />)
    
    const submitButton = screen.getByDisplayValue('Küldés')
    fireEvent.submit(submitButton.closest('form'))
    
    expect(screen.getByText('A név megadása kötelező')).toBeInTheDocument()
    expect(screen.getByText('Az email megadása kötelező')).toBeInTheDocument()
    expect(mockHozzaAd).not.toHaveBeenCalled()
  })

  it('Érvényes adatoknál meghívódik az onSubmit', () => {
    const mockHozzaAd = vi.fn()
    render(<HozzadasForm hozzaAd={mockHozzaAd} />)
    
    const nevInput = screen.getByPlaceholderText('Név')
    const emailInput = screen.getByPlaceholderText('Email')
    const submitButton = screen.getByDisplayValue('Küldés')
    
    fireEvent.change(nevInput, { target: { value: 'Teszt Elek' } })
    fireEvent.change(emailInput, { target: { value: 'teszt@proba.com' } })
    fireEvent.submit(submitButton.closest('form'))
    
    expect(mockHozzaAd).toHaveBeenCalledWith(
      expect.objectContaining({
        nev: 'Teszt Elek',
        email: 'teszt@proba.com'
      })
    )
  })

  it('Érvénytelen email nem engedi a submitet', () => {
    const mockHozzaAd = vi.fn()
    render(<HozzadasForm hozzaAd={mockHozzaAd} />)
    
    const nevInput = screen.getByPlaceholderText('Név')
    const emailInput = screen.getByPlaceholderText('Email')
    const submitButton = screen.getByDisplayValue('Küldés')
    
    fireEvent.change(nevInput, { target: { value: 'Teszt Elek' } })
    fireEvent.change(emailInput, { target: { value: 'rosszemail' } })
    fireEvent.submit(submitButton.closest('form'))
    
    expect(screen.getByText('Érvénytelen email formátum')).toBeInTheDocument()
    expect(mockHozzaAd).not.toHaveBeenCalled()
  })
})
