/**
 * Hosting adapter registry. Maps a provider id to its adapter. Adding a provider =
 * adding one adapter file + one entry here; nothing else in the worker/routes changes.
 */

import { HostingAdapter } from './types';
import { netlifyAdapter } from './netlify';
import { vercelAdapter } from './vercel';
import { githubPagesAdapter } from './githubPages';
import { sftpAdapter } from './sftp';
import { ftpAdapter } from './ftp';
import { s3Adapter } from './s3';
import { wordpressAdapter } from './wordpress';

// NOTE: 'cloudflare-pages' is intentionally NOT registered yet — its adapter
// (./cloudflarePages) is still a stub that always fails at runtime. Leaving it out of
// this map keeps it out of SUPPORTED_HOSTING_PROVIDERS, so a user cannot create a
// Cloudflare connection or enqueue a deployment that would only burn attempts and fail.
// Re-add it here once cloudflarePages.ts implements the Direct Upload flow.
const ADAPTERS: Record<string, HostingAdapter> = {
  netlify: netlifyAdapter,
  vercel: vercelAdapter,
  'github-pages': githubPagesAdapter,
  sftp: sftpAdapter,
  ftp: ftpAdapter,
  s3: s3Adapter,
  wordpress: wordpressAdapter,
};

export function getHostingAdapter(provider: string): HostingAdapter | null {
  return ADAPTERS[provider] || null;
}

export const SUPPORTED_HOSTING_PROVIDERS = Object.keys(ADAPTERS);
