#!/usr/lib/ruby/bin/ruby
# frozen_string_literal: true

$LOAD_PATH.unshift(File.join(File.dirname(File.expand_path(__FILE__)), '..', 'lib'))

require 'yard'
require 'yard-junk'
require 'optparse'

formatters = {}
options = {}

OptionParser.new do |opts| # rubocop:disable Metrics/BlockLength
  opts.banner = 'Usage: yard-junk [formatters]'
  opts.separator ''
  opts.separator 'Formatters'
  opts.separator '(you can use several at once, for example --text to print in console '\
                 'and --html to save HTML report somewhere)'
  opts.separator 'Default is: text formatter, printing to STDOUT.'
  opts.separator ''

  opts.on('--text [PATH]', 'Plaintext formatter (prints to STDOUT by default)') do |path|
    formatters[:text] = path
  end

  opts.on('--html [PATH]',
          'HTML formatter, useful as CI artifact (prints to STDOUT by default)') do |path|
    formatters[:html] = path
  end

  opts.separator ''
  opts.separator 'Other options'

  opts.on('-f', '--path PATTERN1,PATTERN2,PATTERN3',
          'Limit output only to this files. '\
          'Can be path to file or folder, or glob pattern') do |patterns|
    options[:pathes] = patterns.split(',')
  end

  opts.on('-s', '--sanity',
          'Sanity check for docs: just catch mistyped tags and similar stuff. '\
          'On large codebases, MUCH faster than full check.') do
    options[:mode] = :sanity
  end

  opts.on_tail('-v', '--version', 'Prints version') do
    puts "YardJunk #{YardJunk::VERSION}"
    exit
  end

  opts.on_tail('-h', '--help', 'Show this message') do
    puts opts
    exit
  end
end.parse!

formatters = {text: nil} if formatters.empty?

janitor = YardJunk::Janitor.new(**options)
janitor.run
exit janitor.report(**formatters)