buildscript {
	dependencies {
		classpath 'org.ysb33r.gradle:vfs-gradle-plugin:1.0-beta8'
		classpath 'commons-httpclient:commons-httpclient:3.1'
	}
}

plugins {
  id 'org.asciidoctor.convert' version '1.5.3'
  id 'com.github.jruby-gradle.base' version '1.2.1'
}

apply plugin: 'com.github.jruby-gradle.base'
apply plugin: 'org.ysb33r.vfs'
apply plugin: 'java'
apply plugin: 'org.asciidoctor.convert'

version = '1.0.0-SNAPSHOT'

ext {
	revealjsVersion = '3.2.0'
	asciidoctorBackendVersion = 'master'
	downloadDir = new File(buildDir,'download')
	templateDir = new File(downloadDir,'templates')
	revealjsDir   = new File(downloadDir,'reveal.js')
}

repositories {
    jcenter()
}

dependencies {
    gems 'rubygems:slim:3.0.6'
    gems 'rubygems:thread_safe:0.3.5'
}

task download << {
	mkdir downloadDir
	vfs {
		cp "zip:https://github.com/asciidoctor/asciidoctor-reveal.js/archive/${asciidoctorBackendVersion}.zip!asciidoctor-reveal.js-${asciidoctorBackendVersion}",
				templateDir, recursive:true, overwrite:true
		cp "zip:https://github.com/hakimel/reveal.js/archive/${revealjsVersion}.zip!reveal.js-${revealjsVersion}",
                revealjsDir, recursive:true, overwrite:true
	}
}

download {
	description "Download extra revealjs resources"
	outputs.dir templateDir
	outputs.dir revealjsDir
}

asciidoctorj {
  version = '1.5.4'
}

task('mergeClassesAndResources', type: Copy, dependsOn: 'compileJava') {
	ext.bundlorInputPath = new File(buildDir, 'asciidoc-sourcedir')
	inputs.file sourceSets.main.output.classesDir
	inputs.file sourceSets.main.resources
	outputs.dir ext.bundlorInputPath
	from sourceSets.main.output.classesDir
	from sourceSets.main.resources
	into ext.bundlorInputPath
}

asciidoctor {

    dependsOn jrubyPrepare

	sources {
		include 'recipe-messaging-rabbitmq.adoc'
	}

	resources {
		from (sourceDir) {
			include 'images/**'
		}
		from (downloadDir) {
			include 'reveal.js/**'
		}
	}

	backends    'revealjs'

	attributes	'build-gradle': file('build-slides.gradle'),
				'sourcedir': new File(buildDir, 'asciidoc-sourcedir'),
				'endpoint-url': 'http://example.org',
				'source-highlighter': 'coderay',
				'imagesdir': './images',
				'toc': 'left',
				'icons': 'font',
				'setanchors': '',
				'idprefix': '',
				'idseparator': '-',
				'docinfo1': '',
				'revealjs_theme': 'solarized',
				'revealjs_transition': 'linear',
				'revealjs_history': 'true',
				'revealjs_slideNumber': 'true'

	options template_dirs : [new File(templateDir,'templates/slim').absolutePath ]

	dependsOn download
	dependsOn mergeClassesAndResources
}
