import { handleGetRequests } from "./handlers";
import type {
  OAuthAdapterConfig,
  OAuthAdapterOptions,
  OAuthProvider,
} from "./types";

export const OAuthAdapter = (
  adapterOptions: OAuthAdapterOptions,
): OAuthAdapterConfig => {
  const { providers, sessionCallback } = adapterOptions;
  const providersRecord = providers.reduce(
    (record: Record<string, OAuthProvider>, provider: OAuthProvider) => {
      const newRecord = {
        ...record,
        [provider.id]: provider,
      };
      return newRecord;
    },
    {},
  );
  return {
    handlers: {
      GET: (req: Request) =>
        handleGetRequests(req, { providers: providersRecord, sessionCallback }),
    },
  };
};
