import type { Diagnostic } from './linter.js'

export const reportDiagnostics = (diagnostics: Diagnostic[]) => {
  if (diagnostics.length === 0) return

  const errors = diagnostics.filter(d => d.severity === `error`)
  const warnings = diagnostics.filter(d => d.severity === `warning`)
  const infos = diagnostics.filter(d => d.severity === `info`)

  const summary = [
    errors.length > 0 && `${errors.length} error${errors.length === 1 ? `` : `s`}`,
    warnings.length > 0 && `${warnings.length} warning${warnings.length === 1 ? `` : `s`}`,
    infos.length > 0 && `${infos.length} info${infos.length === 1 ? `` : `s`}`,
  ].filter(Boolean).join(`, `)

  console.warn(`\nPolen found ${summary}:\n`)

  diagnostics.forEach((diagnostic, index) => {
    const icon = diagnostic.severity === `error` ? `✗` : diagnostic.severity === `warning` ? `⚠` : `ⓘ`
    console.warn(`${icon} ${index + 1}. ${diagnostic.message}\n`)
  })
}
