#!/usr/bin/env ruby

# TODO: push these changes to licensor gem

require "bundler/setup"
require "licensed/cli"
require "optparse"

module Licensed
  module Source
    class Filesystem
      attr_reader :type

      def initialize(glob, type: "directory")
        @glob = glob
        @type = type
      end

      def enabled?
        !Dir.glob(@glob).empty?
      end

      def dependencies
        Dir.glob(@glob).map do |directory|
          puts "caching #{directory}"
          Licensed::Dependency.new(directory, {
            "type" => type,
            "name" => File.basename(directory)
          })
        end
      end
    end
  end
end

module_path = nil
OptionParser.new do |opts|
  opts.on("-mPATH", "--module=PATH", "Cache license file for specific grammar") do |p|
    module_path = p
  end
end.parse!

source = Licensed::Source::Filesystem.new(module_path || "#{File.expand_path("../", File.dirname(__FILE__))}/vendor/grammars/*/", type: "grammar")
config = Licensed::Configuration.load_from(File.expand_path("../vendor/licenses/config.yml", File.dirname(__FILE__)))
config.sources << source

command = if ARGV[0] == "status"
  Licensed::Command::Status.new(config)
else
  Licensed::Command::Cache.new(config)
end

command.run
`git checkout -- vendor/licenses/grammar/` if module_path
exit command.success?
