import type { HttpContractConfig } from "./types.js";

/**
 * Contract input accepted by APIs that can unwrap builders.
 */
export type ContractLike = HttpContractConfig | { config: HttpContractConfig };

/**
 * Resolve a contract-like type to its plain `HttpContractConfig`.
 */
export type ResolveContract<T> = T extends { config: infer C }
  ? C extends HttpContractConfig
    ? C
    : never
  : T extends HttpContractConfig
    ? T
    : never;

/**
 * Resolve a contract builder or plain config to the underlying contract config.
 *
 * @param c - The contract-like object to resolve
 * @returns The underlying HttpContractConfig
 */
export function resolveContract<T extends ContractLike>(
  c: T,
): ResolveContract<T> {
  return ("config" in c ? c.config : c) as ResolveContract<T>;
}
