require "bundler/gem_tasks"
require "rspec/core/rake_task"
require "rdoc/task"
require "standard/rake"
require "yard"

Rake::RDocTask.new do |rd|
  rd.main = "README.rdoc"
  rd.rdoc_files.include("README.rdoc", "lib/**/*.rb", "bin/**/*")
  rd.title = "Journal"
end

YARD::Rake::YardocTask.new do |t|
  t.files = ["lib/journal-cli/*.rb"]
  t.options = ["--markup-provider=redcarpet", "--markup=markdown", "--no-private", "-p", "yard_templates"]
  # t.stats_options = ['--list-undoc']
end

RSpec::Core::RakeTask.new(:spec) do |t|
  t.rspec_opts = "--pattern spec/*_spec.rb"
end

task default: %i[test]

desc "Alias for build"
task package: :build

task test: "spec"
task lint: "standard"
task format: "standard:fix"

desc "Open an interactive ruby console"
task :console do
  require "irb"
  require "bundler/setup"
  require "journal-cli"
  ARGV.clear
  IRB.start
end

desc "Development version check"
task :ver do
  gver = `git ver`
  cver = IO.read(File.join(File.dirname(__FILE__), "CHANGELOG.md")).match(/^#+ (\d+\.\d+\.\d+(\w+)?)/)[1]
  res = `grep VERSION lib/journal-cli/version.rb`
  version = res.match(/VERSION *= *['"](\d+\.\d+\.\d+(\w+)?)/)[1]
  puts "git tag: #{gver}"
  puts "version.rb: #{version}"
  puts "changelog: #{cver}"
end

desc "Changelog version check"
task :cver do
  puts IO.read(File.join(File.dirname(__FILE__), "CHANGELOG.md")).match(/^#+ (\d+\.\d+\.\d+(\w+)?)/)[1]
end

desc "Bump incremental version number"
task :bump, :type do |_, args|
  args.with_defaults(type: "inc")
  version_file = "lib/journal-cli/version.rb"
  content = IO.read(version_file)
  content.sub!(/VERSION = ["'](?<major>\d+)\.(?<minor>\d+)\.(?<inc>\d+)(?<pre>\S+)?["']/) do
    m = Regexp.last_match
    major = m["major"].to_i
    minor = m["minor"].to_i
    inc = m["inc"].to_i
    pre = m["pre"]

    case args[:type]
    when /^maj/
      major += 1
      minor = 0
      inc = 0
    when /^min/
      minor += 1
      inc = 0
    else
      inc += 1
    end

    $stdout.puts "At version #{major}.#{minor}.#{inc}#{pre}"
    "VERSION = '#{major}.#{minor}.#{inc}#{pre}'"
  end
  File.open(version_file, "w+") { |f| f.puts content }
end