import { afterEach, describe, expect, it, vi } from "vitest"

import { logFileEvent } from "../file-events"

let logSpy: ReturnType<typeof vi.spyOn>

afterEach(() => {
  logSpy?.mockRestore()
})

function capture() {
  const lines: string[] = []
  logSpy = vi
    .spyOn(console, "log")
    .mockImplementation(((line: string) => lines.push(line)) as never)
  return lines
}

describe("logFileEvent (KAR-538)", () => {
  it("emits a structured file.uploaded record", () => {
    const lines = capture()
    logFileEvent("file.uploaded", {
      user_id: "u-1",
      file_id: "f-1",
      size_bytes: 1024,
      mime: "application/pdf",
      bucket: "documents",
    })
    expect(lines.length).toBeGreaterThan(0)
    expect(lines.join("\n")).toContain("file.uploaded")
    expect(lines.join("\n")).toContain("u-1")
    expect(lines.join("\n")).toContain("f-1")
  })

  it("emits a structured file.downloaded record", () => {
    const lines = capture()
    logFileEvent("file.downloaded", { user_id: "u-2", file_id: "f-2" })
    expect(lines.join("\n")).toContain("file.downloaded")
    expect(lines.join("\n")).toContain("u-2")
  })

  it("emits a structured file.deleted record", () => {
    const lines = capture()
    logFileEvent("file.deleted", { user_id: "u-3", file_id: "f-3", reason: "user-action" })
    expect(lines.join("\n")).toContain("file.deleted")
    expect(lines.join("\n")).toContain("user-action")
  })
})
