import np from 'path'
import nfs from 'fs'

C = console.log
def file(path) do np.join (__dirname, path)
def read(file) do try nfs.readFileSync(file, 'utf-8')

def run(steps)
	for step in steps
		C step.desc
		let result = step.run!
		C "[ {result.status ? "OK" : "FAILED"} ] {result.message}"

def addProRouterViewsPlugin()
	const configFile = file "vite.config.js"
	const configContent = read configFile
	return {
		desc: "Adding proRouterViews() plugin to vite.config.js",
		run: do
			if configContent
				if /proRouterViews\(\)/.test(configContent)
					return status: true, message: "plugin already there"
				else
					# import pro-router-imba2/views-plugin
					nfs.writeFileSync(configFile, configContent.replace("imba()","proRouterViews(), imba()"))
					return status: true, message: "config updated"
			else
				return status: false, message: "vite.config.js not found in the project"
	}

def generateRouterFile()
	const destinationFile = file 'src/router.imba'
	const destinationContent = read destinationFile
	return {
		desc: "Generating src/router.imba file"
		run: do
			if destinationContent
				if /R\.init/.test(destinationContent)
					return status: true, message: "router SEEMS to be already on place"
				else
					return status: false, message: "file already exist"
			else
				try
					const routerContent = read file('node_modules/pro-router-imba2/src/router.imba')
					nfs.writeFileSync(destinationFile, routerContent.replace("./", 'pro-router-imba2'))
					return status: true, message: "generated successfuly"
				catch
					return status: false, message: 'unable to copy router.imba template'
	}
def initializeViewsFile()
	const path = 'src/views.json'
	const viewsFile = file path

	return {
		desc: "Initializing views list file - src/views.json"
		run: do
			if nfs.existsSync(path)
				return status: true, message: ["file already exists"]
			else
				nfs.writeFileSync viewsFile, "[]"
				return status: true, message: ["initialized successfuly"]
	}

def importRouter
	const indexFile = file 'src/index.js'
	const indexContent = read indexFile
	
	return {
		desc: "Adding import definition to src/index.js"
		run: do
			if indexContent
				if /import '\.\/router\.imba'/.test(indexContent)
					return status: true, message: "import definition already there"
				else
					try
						nfs.writeFileSync indexFile, "import './router.imba'\n" + indexContent
						return status: true, message: "definition added successfuly"
					catch
						return status: false, message: "failed during writing to file"
			else
				return status: false, message: 'no such file or directory'
	}

if process.argv.slice(2) == "init"
	run([addProRouterViewsPlugin(), generateRouterFile(), initializeViewsFile(), importRouter()])
else
	C("For initial configuration of pro router use command: pro-router init")