import { describe, expect, it } from 'vitest'
import { canInvite, canRemove, canRequestServices, canUploadDocuments } from '@/lib/domain/permissions'

describe('per-trip permission matrix', () => {
  it('broker can invite dispatcher, dispatcher can invite driver', () => {
    expect(canInvite('broker', 'dispatcher')).toBe(true)
    expect(canInvite('dispatcher', 'driver')).toBe(true)
    expect(canInvite('dispatcher', 'broker')).toBe(true)
  })

  it('protects relationship circles', () => {
    expect(canInvite('driver', 'shipper')).toBe(false)
    expect(canInvite('pilot', 'broker')).toBe(false)
    expect(canInvite('shipper', 'driver')).toBe(false)
  })

  it('removal mirrors invitation', () => {
    expect(canRemove('dispatcher', 'driver')).toBe(true)
    expect(canRemove('driver', 'shipper')).toBe(false)
  })

  it('anyone on the trip can request routes/permits (Nash: shared purchases)', () => {
    for (const role of ['broker', 'dispatcher', 'driver', 'pilot', 'shipper'] as const) {
      expect(canRequestServices(role)).toBe(true)
    }
  })

  it('shipper cannot upload documents', () => {
    expect(canUploadDocuments('shipper')).toBe(false)
    expect(canUploadDocuments('driver')).toBe(true)
  })
})
