import { describe, expect, it } from 'vitest'

import {
  checkReportAccess,
  TimeReportExportQuerySchema,
  TimeReportQuerySchema,
} from '../src/routes/reports/time-reports'

describe('time reports route schemas', () => {
  it('accepts xlsx export requests', () => {
    const result = TimeReportExportQuerySchema.safeParse({
      groupBy: 'project',
      from: '2026-06-01',
      to: '2026-06-30',
      format: 'xlsx',
    })

    expect(result.success).toBe(true)
  })

  it('rejects invalid date ranges where to precedes from', () => {
    const result = TimeReportQuerySchema.safeParse({
      groupBy: 'person',
      from: '2026-06-30',
      to: '2026-06-01',
    })

    expect(result.success).toBe(false)
  })

  it('rejects invalid export date ranges where to precedes from', () => {
    const result = TimeReportExportQuerySchema.safeParse({
      groupBy: 'task',
      from: '2026-06-30',
      to: '2026-06-01',
      format: 'xlsx',
    })

    expect(result.success).toBe(false)
  })

  it('accepts contractor report filters', () => {
    const result = TimeReportQuerySchema.safeParse({
      groupBy: 'person',
      contractorId: '11111111-1111-4111-8111-111111111111',
    })

    expect(result.success).toBe(true)
  })

  it('locks owner/admin without reports:read to their own user id', () => {
    const access = checkReportAccess(
      'owner',
      '22222222-2222-4222-8222-222222222222',
      {
        groupBy: 'person',
        userId: '11111111-1111-4111-8111-111111111111',
      },
      ['time:read'],
    )

    expect(access).toEqual({
      allowed: true,
      forceUserId: '22222222-2222-4222-8222-222222222222',
    })
  })
})
