// src/provider/openai.ts
import { join } from "node:path";
import type { Provider, ProviderId, RouteMatch } from "./types.ts";

const ID: ProviderId = "openai" as ProviderId;

function notImpl(name: string): never {
  throw new Error(`OpenAIProvider.${name} not implemented (stub — Phase 7)`);
}

export const openAIProvider: Provider = {
  id: ID,
  supportsCacheMarkers: false,
  defaultUpstreamUrl: "https://api.openai.com",
  matchesRoute(method, urlPath, headers): RouteMatch | null {
    if (method !== "POST") return null;
    if (urlPath === "/v1/chat/completions") {
      const isStreaming = (headers.get("accept") ?? "").includes("text/event-stream");
      return { kind: "completions", isStreaming };
    }
    return null;
  },
  parseRequest: () => notImpl("parseRequest"),
  parseResponse: () => notImpl("parseResponse"),
  parseSseEvent: () => null,
  extractToolCalls: () => notImpl("extractToolCalls"),
  extractToolResults: () => notImpl("extractToolResults"),
  extractLastTurnToolResults: () => notImpl("extractLastTurnToolResults"),
  extractTokenUsage: () => notImpl("extractTokenUsage"),
  extractModel: () => notImpl("extractModel"),
  extractSessionId: () => notImpl("extractSessionId"),
  rewriteToolResult: (body) => body, // no-op (no cache markers anyway)
  hintSurfacePath(projectRoot: string): string | null {
    return join(projectRoot, "AGENTS.md");
  },
  listModels: () => [],
};
