class Meta < Jekyll::Generator
	def generate(site)
		# convert yaml @0123456789 (unix timestamps) into ruby Date
		site.data = parse_unix_dates(site.data)

		for page in site.collections['items'] do
			# convert generated page metadata and add directly to `page.meta` in liquid
			page.data['meta'] = transform_data(site, page.slug)

			# set page.authors to author metadata from git+yaml
			page.data['authors'] = site.data['authors'].filter do |author|
				author['git'].intersect?(page.data['meta']['authors'])
			end

			# set page.date to generated date_initial
			page.data['date'] = page.data['meta']['date']
		end
	end

	def parse_unix_dates(data)
		# recurse deeper
		return data.transform_values { |val| parse_unix_dates(val) } if data.is_a? Hash
		return data.map { |val| parse_unix_dates(val) } if data.is_a? Array

		# convert strings matching regex
		return Time.at(Integer(data[1..])) if data.is_a? String and data =~ /^@\d+$/

		# base case
		return data
	end

	def transform_data(site, slug)
		data = site.data['post'][slug]
		data['git_log'] = data['git_log'].sort { |c| c['date'].to_i }

		git_log = data['git_log'].filter do |commit|
			!site.data['git']['ignore_commits'].include?(commit['hash'])
		end

		data['authors'] = git_log.map{ |c| c['author'] }.uniq
		data['date_initial'] = git_log.first['date']
		data['date'] = git_log.last['date']
		return data
	end
end