import { describe, expect, it } from 'vitest'
import { readFileSync } from 'node:fs'
import { resolve } from 'node:path'

function readRepoFile(relativePath: string): string {
  return readFileSync(resolve(__dirname, '../../..', relativePath), 'utf8')
}

describe('foundation monorepo deployment and rate-limit config', () => {
  it('deploys worker-backed apps with wrangler deploy instead of Pages deploy', () => {
    const mainWorkflow = readRepoFile('.github/workflows/main.yml')
    const prWorkflow = readRepoFile('.github/workflows/pr.yml')

    expect(mainWorkflow).toContain('pnpm --filter zync-www exec wrangler deploy --env production')
    expect(mainWorkflow).toContain('pnpm --filter zync-app exec wrangler deploy --env production')
    expect(mainWorkflow).not.toContain('wrangler pages deploy dist --project-name=zync-www')
    expect(mainWorkflow).not.toContain('wrangler pages deploy dist --project-name=zync-app')

    expect(prWorkflow).toContain('pnpm --filter zync-www exec wrangler deploy --env preview')
    expect(prWorkflow).toContain('pnpm --filter zync-app exec wrangler deploy --env preview')
    expect(prWorkflow).not.toContain('wrangler pages deploy dist --project-name=zync-www-preview')
    expect(prWorkflow).not.toContain('wrangler pages deploy dist --project-name=zync-app-preview')
  })

  it('keeps foundation-native rate limits aligned with the spec', () => {
    const wranglerConfig = readRepoFile('apps/zync-api/wrangler.toml')

    expect(wranglerConfig).toContain('name         = "RATE_LIMITER_EXPENSE_UPLOAD"')
    expect(wranglerConfig).toContain('limit  = 10')
    expect(wranglerConfig).toContain('name         = "RATE_LIMITER_LEAD_FORM"')
    expect(wranglerConfig).toContain('limit  = 20')
  })

  it('exports the shared db schema subpath used by foundation packages', () => {
    const packageJson = readRepoFile('packages/db/package.json')

    expect(packageJson).toContain('"./schema": "./src/schema/index.ts"')
  })
})
