import { Case } from './test-case'
/** Configuration for eslint-rule-benchmark. */
export interface UserBenchmarkConfig extends BaseBenchmarkSettings {
  /**
   * An array of benchmark test specifications. Each test specification defines
   * a rule, a name, and one or more test cases to run against that rule. Each
   * test specification can also override global benchmark settings.
   */
  tests: (BaseBenchmarkSettings & Test)[]
}

/** Defines base benchmark settings that can be applied globally or per test. */
interface BaseBenchmarkSettings {
  /**
   * Warmup settings. Controls JIT warmup behavior before measurements. Can be
   * set globally or overridden per test.
   */
  warmup?: {
    /**
     * Number of warmup iterations to perform. Higher values may provide more
     * stable results but increase execution time.
     */
    iterations?: number

    /**
     * Whether to enable warmup runs before actual measurements. Defaults to
     * true.
     */
    enabled?: boolean
  }

  /**
   * Number of measurement iterations to perform for each code sample. Higher
   * values lead to more precise results but longer execution. Can be set
   * globally or overridden per test.
   */
  iterations?: number

  /**
   * Timeout in milliseconds for each individual code sample benchmark run. Can
   * be set globally or overridden per test.
   */
  timeout?: number
}

/** Defines a single benchmark test specification. */
interface Test {
  /** Path to rule implementation file (for custom rules). */
  rulePath: string

  /**
   * Rule identifier (e.g., "no-console" or
   * "@typescript-eslint/no-unused-vars").
   */
  ruleId: string

  /**
   * An array of test cases to run for this rule. Each case defines specific
   * code samples and can have its own ESLint rule options and severity.
   */
  cases: Case[]

  /** Name for this group of benchmark cases. Will be used in reports. */
  name: string
}
