import { describe, expect, it } from 'vitest'
import { parseBody, parseQuery } from '../../http/validate'
import { carplaceReservationSchema, paginationSchema } from '../../modules/carplace/carplace.schemas'
import { paySchema } from '../../modules/site/site.schemas'

function reqWith(body: unknown, query: unknown = {}) {
  return { body, query, params: {} } as any
}

describe('public validation boundaries', () => {
  it('keeps carplace pagination coercion consistent with route parsing', () => {
    expect(parseQuery(paginationSchema, reqWith({}, { page: '4', pageSize: '25' }))).toEqual({
      page: 4,
      pageSize: 25,
    })
  })

  it('blocks unsupported public payment providers before service orchestration', () => {
    expect(() => parseBody(paySchema, reqWith({
      provider: 'STRIPE',
      successUrl: 'https://ok.example.test',
      failureUrl: 'https://fail.example.test',
      accessToken: 'booking-access-token-123',
    }))).toThrow('Invalid enum value')
  })

  it('requires enough anonymous carplace reservation identity to create a booking request', () => {
    const parsed = parseBody(carplaceReservationSchema, reqWith({
      vehicleId: 'ckvvehicle000000000000001',
      companySlug: 'atlas-cars',
      firstName: 'Aya',
      lastName: 'Benali',
      email: 'aya@example.com',
      startDate: '2026-07-01T10:00:00.000Z',
      endDate: '2026-07-03T10:00:00.000Z',
    }))

    expect(parsed.language).toBe('fr')
  })
})
