function iter$__(a){ let v; return a ? ((v=a.toIterable) ? v.call(a) : a) : a; };

var np = require('path');
var nfs = require('fs');

function file(path){
	return np.resolve(process.cwd(), path);
};
function read(file){
	try {
		return nfs.readFileSync(file, 'utf-8');
	} catch (e) { };
};

function run(steps){
	var $1;
	
	$1 = [];
	for (let $2 = 0, $3 = iter$__(steps), $4 = $3.length; $2 < $4; $2++) {
		let step = $3[$2];
		console.log(step.desc);
		let result = step.run();
		$1.push(console.log(("[ " + (result.status ? "OK" : "FAILED") + " ] " + (result.message))));
	};
	return $1;
};

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

function generateRouterFile(){
	
	const destinationFile = file('src/router.imba');
	const destinationContent = read(destinationFile);
	return {
		desc: "Generating src/router.imba file",
		run: function() {
			
			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);
					return {status: true,message: "generated successfuly"};
				} catch ($5) {
					
					return {status: false,message: 'unable to copy router.imba template'};
				};
			};
		}
	};
};
function initializeViewsFile(){
	
	const path = 'src/views.json';
	const viewsFile = file(path);
	
	return {
		desc: "Initializing views list file - src/views.json",
		run: function() {
			
			if (nfs.existsSync(path)) {
				
				return {status: true,message: ["file already exists"]};
			} else {
				
				nfs.writeFileSync(viewsFile,"[]");
				return {status: true,message: ["initialized successfuly"]};
			};
		}
	};
};

function importRouter(){
	
	const indexFile = file('src/index.js');
	const indexContent = read(indexFile);
	
	return {
		desc: "Adding import definition to src/index.js",
		run: function() {
			
			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 ($6) {
						
						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 {
	
	console.log("For initial configuration of pro router use command: pro-router init");
};