import { isAstroServerEnvironment } from "../environments.js";
import { fileURLToPath } from "node:url";
import { ASTRO_VITE_ENVIRONMENT_NAMES } from "../core/constants.js";
const VIRTUAL_CLIENT_ID = "virtual:astro:adapter-config/client";
const RESOLVED_VIRTUAL_CLIENT_ID = "\0" + VIRTUAL_CLIENT_ID;
function vitePluginAdapterConfig(settings) {
  return {
    name: "astro:adapter-config",
    config() {
      const { adapter } = settings;
      if (adapter && adapter.entrypointResolution === "auto" && adapter.serverEntrypoint) {
        return {
          environments: {
            [ASTRO_VITE_ENVIRONMENT_NAMES.ssr]: {
              build: {
                rollupOptions: {
                  input: {
                    index: typeof adapter.serverEntrypoint === "string" ? adapter.serverEntrypoint : fileURLToPath(adapter.serverEntrypoint)
                  }
                }
              }
            }
          }
        };
      }
    },
    resolveId: {
      filter: {
        id: new RegExp(`^${VIRTUAL_CLIENT_ID}$`)
      },
      handler() {
        return RESOLVED_VIRTUAL_CLIENT_ID;
      }
    },
    load: {
      filter: {
        id: new RegExp(`^${RESOLVED_VIRTUAL_CLIENT_ID}$`)
      },
      handler() {
        if (isAstroServerEnvironment(this.environment)) {
          return {
            code: `export const internalFetchHeaders = {};`
          };
        }
        const adapter = settings.adapter;
        const clientConfig = adapter?.client || {};
        let internalFetchHeaders = {};
        if (clientConfig.internalFetchHeaders) {
          internalFetchHeaders = typeof clientConfig.internalFetchHeaders === "function" ? clientConfig.internalFetchHeaders() : clientConfig.internalFetchHeaders;
        }
        return {
          code: `export const internalFetchHeaders = ${JSON.stringify(internalFetchHeaders)};`
        };
      }
    }
  };
}
export {
  vitePluginAdapterConfig
};
