const path = require('path')
const createCommonRoutes = require('./createCommonRoutes.js')

const createPrimaryRoutes = (config, plugins) => {
	const routes = createCommonRoutes(config)

	let myPlugins = plugins

	const pluginFolders = {}

	const routesOptions = {
		security: {
			hsts: {
				maxAge: 15768000,
				includeSubDomains: true,
				preload: true
			},
			xframe: 'sameorigin'
		}
	}

	plugins.reduce((obj, plugin) => {
		obj[plugin.name] = plugin.folder
		return obj
	}, pluginFolders)


	routes.push(
		{
			method: 'GET',
			path: '/',
			handler: (request, reply) => {
				return reply.redirect('/app')
			},
			options: routesOptions
		},
		{
			method: 'GET',
			path: '/{path*}',
			handler: (request, h) => {
				const filePath = path.join(__dirname, '../../public/index.html')
				const response = h.file(filePath, {
					confine: true
				})
				response.header('Access-Control-Allow-Origin', request.info.host)
				return response
			},
			options: routesOptions
		},
		{
			method: 'GET',
			path: '/getPlugins',
			handler: (request, h) => {
				return { plugins: myPlugins.map(p => p.name) }
			},
			options: routesOptions
		},
		{
			method: 'GET',
			path: '/build/{param*}',
			handler: {
				directory: {
					path: config.build.options.outputDir,
					redirectToSlash: true,
					index: true
				}
			},
			options: routesOptions
		},
		{
			method: 'GET',
			path: '/src/{param*}',
			handler: {
				directory: {
					path: path.join(__dirname, '../../src'),
					redirectToSlash: true,
					index: true
				}
			},
			options: routesOptions
		},
		{
			method: 'GET',
			path: '/plugin/{path*}',
			handler: (request, h) => {

				const plugin = request.params.path.split('/')[0]
				const filePath = path.join(pluginFolders[plugin], '../', request.params.path)

				const response = h.file(filePath, {
					confine: false
				})
				response.header('Access-Control-Allow-Origin', request.info.host)
				return response
			},
			options: routesOptions
		},
		{
			method: 'GET',
			path: '/plugin/404',
			handler: (request, h) => {
				const response = h.file(path.join(config.server.primary.page404))
				response.header('Access-Control-Allow-Origin', request.info.host)
				return response
			},
			options: routesOptions
		},
		{
			method: 'GET',
			path: '/qortal-components/plugin-mainjs-loader.html',
			handler: (request, h) => {
				const response = h.file(path.join(__dirname, '../../src/plugins/plugin-mainjs-loader.html'), {
					confine: false
				})
				response.header('Access-Control-Allow-Origin', request.info.host)
				return response
			},
			options: routesOptions
		},
		{
			method: 'GET',
			path: '/qortal-components/plugin-mainjs-loader.js',
			handler: (request, h) => {
				const file = path.join(config.build.options.outputDir, '/plugins/plugin-mainjs-loader.js')

				const response = h.file(file, {
					confine: false
				})
				response.header('Access-Control-Allow-Origin', request.info.host)
				return response
			},
			options: routesOptions
		}

	)

	return routes
}

module.exports = createPrimaryRoutes