#!/usr/bin/ruby.ruby3.4 
# vim: fileencoding=utf-8
require 'rubygems'
require 'optparse'
begin
  require 'crxmake'
rescue LoadError
  # require_relative is 1.9 only
  require File.expand_path("../../lib/crxmake", __FILE__)
end

data = {}
usage = <<-EOS
option not valid

[usage]
  required opt
   --pack-extension=<extension dir>
     extension source directory

  optional opt
   --extension-output=<extension output path>
     crx output path (default: ./<extension dirname>.crx)
   --zip-output=<zip output path>
     zip output path (default: ./<extension dirname>.zip)
     if it isn't defined, crxmake is working on crx mode.
   --mode=<zip or crx>
     if it is defined, this value mode is priority.
   --pack-extension-key=<pem path>
     pem key path
   --key-output=<key path>
     pem key output path if you generate key (default: ./<extension
  dirname>.pem)
  --ignore-file=<pattern>
    pattern to ignore files
    pattern is compiled by Regexp.new(<pattern>)
  --ignore-dir=<pattern>
    pattern to ignore directories
    pattern is compiled by Regexp.new(<pattern>)
    EOS

OptionParser.new('Packaging Chromium Extension') do |opt|
  opt.version = '2'
  opt.on('--pack-extension DIR') do |val|
    data[:ex_dir] = val
  end
  opt.on('--pack-extension-key KEY') do |key|
    data[:pkey] = key
  end
  opt.on('--key-output OKEY') do |okey|
    data[:pkey_output] = okey
  end
  opt.on('--extension-output CRX') do |crx|
    data[:crx_output] = crx
  end
  opt.on('--zip-output ZIP') do |zip|
    data[:zip_output] = zip
  end
  opt.on('--mode CORZ') do |corz|
    if corz == 'zip'
      data[:zip_flag] = true
    elsif corz == 'crx'
      data[:crx_flag] = true
    end
  end
  opt.on('--ignore-file FILE') do |file|
    data[:ignorefile] = Regexp.new file
  end
  opt.on('--ignore-dir DIR') do |dir|
    data[:ignoredir] = Regexp.new dir
  end
  opt.on('-v', '--verbose') do
    data[:verbose] = true
  end
  begin
    opt.parse!(ARGV)
  rescue
    puts usage
   end
end

begin
  if data[:crx_flag]
    CrxMake.make data
  elsif data[:zip_flag]
    CrxMake.zip data
  else
    if data[:zip_output]
      CrxMake.zip data
    else
      CrxMake.make data
    end
  end
rescue => e
  puts e.message
  puts usage
end

