import { HugoCommand, HugoOptionsFor } from "./generated/types.mjs";
import { ENV_VAR_DOCS, HugoEnvConfig, getEnvConfig } from "./lib/env.mjs";

//#region src/hugo.d.ts
/**
 * Gets the path to the Hugo binary, automatically installing it if it's missing.
 *
 * This is the main entry point for the hugo-extended package. It checks if Hugo
 * is already installed and available, and if not, triggers an automatic installation
 * before returning the binary path.
 *
 * This handles the case where Hugo may mysteriously disappear (see issue #81),
 * ensuring the binary is always available when this function is called.
 *
 * Environment variables that affect behavior:
 * - HUGO_BIN_PATH: Use a custom binary path (skips auto-install if missing)
 *
 * @returns A promise that resolves with the absolute path to the Hugo binary
 * @throws {Error} If installation fails, the platform is unsupported, or custom binary is missing
 *
 * @example
 * ```typescript
 * import hugo from 'hugo-extended';
 *
 * const hugoPath = await hugo();
 * console.log(hugoPath); // "/usr/local/bin/hugo" or "./bin/hugo"
 * ```
 */
declare const getHugoBinary: () => Promise<string>;
/**
 * Execute a Hugo command with type-safe options.
 *
 * This function runs Hugo with the specified command and options, inheriting stdio
 * so output goes directly to the console. It's perfect for interactive commands
 * like `hugo server` or build commands where you want to see live output.
 *
 * @param command - Hugo command to execute (e.g., "server", "build", "mod clean")
 * @param positionalArgsOrOptions - Either positional arguments array or options object
 * @param options - Type-safe options object (if first param is positional args)
 * @returns A promise that resolves when the command completes successfully
 * @throws {Error} If the command fails or Hugo is not available
 *
 * @example
 * ```typescript
 * import { exec } from 'hugo-extended';
 *
 * // Start development server
 * await exec("server", {
 *   port: 1313,
 *   buildDrafts: true,
 *   baseURL: "http://localhost:1313"
 * });
 *
 * // Create a new project
 * await exec("new project", ["my-site"], { format: "yaml" });
 *
 * // Build site for production
 * await exec("build", {
 *   minify: true,
 *   cleanDestinationDir: true
 * });
 * ```
 */
declare function exec<C extends HugoCommand>(command: C, positionalArgsOrOptions?: string[] | HugoOptionsFor<C>, options?: HugoOptionsFor<C>): Promise<void>;
/**
 * Execute a Hugo command and capture its output.
 *
 * This function runs Hugo with the specified command and options, capturing
 * stdout and stderr. It's useful for commands where you need to process the
 * output programmatically, like `hugo version` or `hugo list all`.
 *
 * @param command - Hugo command to execute (e.g., "version", "list all")
 * @param positionalArgsOrOptions - Either positional arguments array or options object
 * @param options - Type-safe options object (if first param is positional args)
 * @returns A promise that resolves with stdout and stderr strings
 * @throws {Error} If the command fails or Hugo is not available
 *
 * @example
 * ```typescript
 * import { execWithOutput } from 'hugo-extended';
 *
 * // Get Hugo version
 * const { stdout } = await execWithOutput("version");
 * console.log(stdout); // "hugo v0.154.3+extended ..."
 *
 * // List all content
 * const { stdout: content } = await execWithOutput("list all");
 * const pages = content.split('\n');
 * ```
 */
declare function execWithOutput<C extends HugoCommand>(command: C, positionalArgsOrOptions?: string[] | HugoOptionsFor<C>, options?: HugoOptionsFor<C>): Promise<{
  stdout: string;
  stderr: string;
}>;
/**
 * Builder-style API for executing Hugo commands.
 *
 * Provides a fluent interface where each Hugo command is a method on the
 * builder object. All methods are type-safe with autocomplete for options.
 *
 * @example
 * ```typescript
 * import { hugo } from 'hugo-extended';
 *
 * // Start server
 * await hugo.server({ port: 1313, buildDrafts: true });
 *
 * // Build site
 * await hugo.build({ minify: true });
 *
 * // Module operations
 * await hugo.mod.clean({ all: true });
 * await hugo.mod.get();
 * ```
 */
declare const hugo: {
  /** Build your site */build: (options?: HugoOptionsFor<"build">) => Promise<void>; /** Generate shell completion scripts */
  completion: {
    bash: (options?: HugoOptionsFor<"completion bash">) => Promise<void>;
    fish: (options?: HugoOptionsFor<"completion fish">) => Promise<void>;
    powershell: (options?: HugoOptionsFor<"completion powershell">) => Promise<void>;
    zsh: (options?: HugoOptionsFor<"completion zsh">) => Promise<void>;
  }; /** Print Hugo configuration */
  config: (options?: HugoOptionsFor<"config">) => Promise<void>; /** Convert content to different formats */
  convert: {
    toJSON: (options?: HugoOptionsFor<"convert toJSON">) => Promise<void>;
    toTOML: (options?: HugoOptionsFor<"convert toTOML">) => Promise<void>;
    toYAML: (options?: HugoOptionsFor<"convert toYAML">) => Promise<void>;
  }; /** Print Hugo environment info */
  env: (options?: HugoOptionsFor<"env">) => Promise<void>; /** Generate documentation */
  gen: {
    doc: (options?: HugoOptionsFor<"gen doc">) => Promise<void>;
    man: (options?: HugoOptionsFor<"gen man">) => Promise<void>;
  }; /** Import your site from others */
  import: {
    jekyll: (options?: HugoOptionsFor<"import jekyll">) => Promise<void>;
  }; /** List various types of content */
  list: {
    all: (options?: HugoOptionsFor<"list all">) => Promise<void>;
    drafts: (options?: HugoOptionsFor<"list drafts">) => Promise<void>;
    expired: (options?: HugoOptionsFor<"list expired">) => Promise<void>;
    future: (options?: HugoOptionsFor<"list future">) => Promise<void>;
    published: (options?: HugoOptionsFor<"list published">) => Promise<void>;
  }; /** Module operations */
  mod: {
    clean: (options?: HugoOptionsFor<"mod clean">) => Promise<void>;
    get: (options?: HugoOptionsFor<"mod get">) => Promise<void>;
    graph: (options?: HugoOptionsFor<"mod graph">) => Promise<void>;
    init: (options?: HugoOptionsFor<"mod init">) => Promise<void>;
    npm: {
      pack: (options?: HugoOptionsFor<"mod npm pack">) => Promise<void>;
    };
    tidy: (options?: HugoOptionsFor<"mod tidy">) => Promise<void>;
    vendor: (options?: HugoOptionsFor<"mod vendor">) => Promise<void>;
    verify: (options?: HugoOptionsFor<"mod verify">) => Promise<void>;
  }; /** Create new content */
  new: ((pathOrOptions?: string | HugoOptionsFor<"new">, options?: HugoOptionsFor<"new">) => Promise<void>) & {
    content: (pathOrOptions?: string | HugoOptionsFor<"new content">, options?: HugoOptionsFor<"new content">) => Promise<void>;
    project: (pathOrOptions?: string | HugoOptionsFor<"new project">, options?: HugoOptionsFor<"new project">) => Promise<void>;
    theme: (nameOrOptions?: string | HugoOptionsFor<"new theme">, options?: HugoOptionsFor<"new theme">) => Promise<void>;
  }; /** Start the Hugo development server */
  server: (options?: HugoOptionsFor<"server">) => Promise<void>; /** Print the Hugo version */
  version: (options?: HugoOptionsFor<"version">) => Promise<void>;
};
declare const _default: (() => Promise<string>) & {
  /** Build your site */build: (options?: HugoOptionsFor<"build">) => Promise<void>; /** Generate shell completion scripts */
  completion: {
    bash: (options?: HugoOptionsFor<"completion bash">) => Promise<void>;
    fish: (options?: HugoOptionsFor<"completion fish">) => Promise<void>;
    powershell: (options?: HugoOptionsFor<"completion powershell">) => Promise<void>;
    zsh: (options?: HugoOptionsFor<"completion zsh">) => Promise<void>;
  }; /** Print Hugo configuration */
  config: (options?: HugoOptionsFor<"config">) => Promise<void>; /** Convert content to different formats */
  convert: {
    toJSON: (options?: HugoOptionsFor<"convert toJSON">) => Promise<void>;
    toTOML: (options?: HugoOptionsFor<"convert toTOML">) => Promise<void>;
    toYAML: (options?: HugoOptionsFor<"convert toYAML">) => Promise<void>;
  }; /** Print Hugo environment info */
  env: (options?: HugoOptionsFor<"env">) => Promise<void>; /** Generate documentation */
  gen: {
    doc: (options?: HugoOptionsFor<"gen doc">) => Promise<void>;
    man: (options?: HugoOptionsFor<"gen man">) => Promise<void>;
  }; /** Import your site from others */
  import: {
    jekyll: (options?: HugoOptionsFor<"import jekyll">) => Promise<void>;
  }; /** List various types of content */
  list: {
    all: (options?: HugoOptionsFor<"list all">) => Promise<void>;
    drafts: (options?: HugoOptionsFor<"list drafts">) => Promise<void>;
    expired: (options?: HugoOptionsFor<"list expired">) => Promise<void>;
    future: (options?: HugoOptionsFor<"list future">) => Promise<void>;
    published: (options?: HugoOptionsFor<"list published">) => Promise<void>;
  }; /** Module operations */
  mod: {
    clean: (options?: HugoOptionsFor<"mod clean">) => Promise<void>;
    get: (options?: HugoOptionsFor<"mod get">) => Promise<void>;
    graph: (options?: HugoOptionsFor<"mod graph">) => Promise<void>;
    init: (options?: HugoOptionsFor<"mod init">) => Promise<void>;
    npm: {
      pack: (options?: HugoOptionsFor<"mod npm pack">) => Promise<void>;
    };
    tidy: (options?: HugoOptionsFor<"mod tidy">) => Promise<void>;
    vendor: (options?: HugoOptionsFor<"mod vendor">) => Promise<void>;
    verify: (options?: HugoOptionsFor<"mod verify">) => Promise<void>;
  }; /** Create new content */
  new: ((pathOrOptions?: string | HugoOptionsFor<"new">, options?: HugoOptionsFor<"new">) => Promise<void>) & {
    content: (pathOrOptions?: string | HugoOptionsFor<"new content">, options?: HugoOptionsFor<"new content">) => Promise<void>;
    project: (pathOrOptions?: string | HugoOptionsFor<"new project">, options?: HugoOptionsFor<"new project">) => Promise<void>;
    theme: (nameOrOptions?: string | HugoOptionsFor<"new theme">, options?: HugoOptionsFor<"new theme">) => Promise<void>;
  }; /** Start the Hugo development server */
  server: (options?: HugoOptionsFor<"server">) => Promise<void>; /** Print the Hugo version */
  version: (options?: HugoOptionsFor<"version">) => Promise<void>;
};
//#endregion
export { ENV_VAR_DOCS, type HugoCommand, type HugoEnvConfig, type HugoOptionsFor, _default as default, exec, execWithOutput, getEnvConfig, getHugoBinary, hugo };