require 'json'
require 'yaml'

module Variables
  class Generator < Jekyll::Generator
    safe true

    def generate(site)
      metadata_files = {
        'bower' => '../bower.json',
        'package' => '../package.json',
        'bower_jquery' => '../bower_components/jquery/bower.json'
      }

      metadata_files.each do |metadata, path|
        contents = JSON.parse(File.read(File.join(site.source, path)))
        site.data[metadata] = contents
      end

      # some quick access to common variables (instead of diving into package and bower)
      name = site.data['package']['name']
      version = site.data['package']['version']
      bootstrap_version = site.data['bower']['dependencies']['bootstrap']
      jquery_version = site.data['bower_jquery']['version']

      site.data['name'] = name
      site.data['version'] = version
      site.data['bootstrap_version'] = bootstrap_version
      site.data['jquery_version'] = jquery_version


      # fabricate the archive and release links based on the site.repo and version
      jekyll_config = Jekyll.configuration({})
      repo = jekyll_config['repo']
      site.data['download'] = {
        'source' => "#{repo}/archive/v#{version}.zip",
        'dist' => "#{repo}/releases/download/v#{version}/#{name}-#{version}-dist.zip"
      }

      site.data['cdn'] = {
        'jquery' => jekyll_config['cdn']['jquery'].gsub(/VERSION/, jquery_version),
        'bootstrap' => jekyll_config['cdn']['bootstrap'].gsub(/VERSION/, bootstrap_version)
      }

      #
      # puts "\n---------------------"
      # puts site.data[:package]['version']
      # puts site.data.to_yaml
      # puts repo
      # puts version
    end
  end
end