import * as prettier from 'prettier'
import {Config} from 'prettier'

type Override = NonNullable<Config['overrides']>[number]
/**
 * Shared Prettier configuration for bfra.me projects.
 * @see https://prettier.io/docs/en/configuration.html
 */
declare const defaultConfig: {
  arrowParens: 'avoid'
  bracketSpacing: false
  endOfLine: 'auto'
  printWidth: number
  semi: false
  singleQuote: true
  /** Provide a list of patterns to override prettier configuration. */
  overrides: Override[]
}

declare const $80ProofConfig: {
  printWidth: number
  arrowParens: 'avoid'
  bracketSpacing: false
  endOfLine: 'auto'
  semi: false
  singleQuote: true
  overrides: {
    files: string | string[]
    excludeFiles?: string | string[]
    options?: prettier.Options
  }[]
}

declare const $120ProofConfig: {
  printWidth: number
  arrowParens: 'avoid'
  bracketSpacing: false
  endOfLine: 'auto'
  semi: false
  singleQuote: true
  overrides: {
    files: string | string[]
    excludeFiles?: string | string[]
    options?: prettier.Options
  }[]
}

declare const defineConfig: <C extends Config>(config: C) => C

declare const semi: {
  semi: true
  arrowParens: 'avoid'
  bracketSpacing: false
  endOfLine: 'auto'
  printWidth: number
  singleQuote: true
  overrides: {
    files: string | string[]
    excludeFiles?: string | string[]
    options?: prettier.Options
  }[]
}

export {
  defaultConfig as $100ProofConfig,
  $120ProofConfig,
  $80ProofConfig,
  defaultConfig as default,
  defaultConfig,
  defineConfig,
  semi,
}
