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

const { createDb, getActiveIncidents, deriveServiceStatuses, deriveOverallStatus } = vi.hoisted(() => ({
  createDb: vi.fn(() => ({ db: 'mock' })),
  getActiveIncidents: vi.fn(),
  deriveServiceStatuses: vi.fn(),
  deriveOverallStatus: vi.fn(),
}))

vi.mock('@zync/db/queries', () => ({
  createDb,
  getActiveIncidents,
  deriveServiceStatuses,
  deriveOverallStatus,
}))

import { getCachedStatus } from '../src/lib/status-cache'

describe('getCachedStatus', () => {
  beforeEach(() => {
    vi.clearAllMocks()
  })

  it('stores fresh status payloads with the spec TTL of 30 seconds', async () => {
    const put = vi.fn()
    const env = {
      STATUS_KV: {
        get: vi.fn().mockResolvedValue(null),
        put,
      },
    }

    getActiveIncidents.mockResolvedValue([])
    deriveServiceStatuses.mockReturnValue([])
    deriveOverallStatus.mockReturnValue('operational')

    await getCachedStatus(env as never)

    expect(put).toHaveBeenCalledWith(
      'status:current',
      expect.any(String),
      expect.objectContaining({ expirationTtl: 30 }),
    )
  })
})
