const fs = require('fs');
const path = require('path');

function stripJsonComments(content) {
	// Remove /* */ comments first, then // comments.
	return String(content || '')
		.replace(/\/\*[\s\S]*?\*\//g, '')
		.replace(/^\s*\/\/.*$/gm, '');
}

// 读取 routes 配置并转换为 pages.json
function generatePagesJson() {
	// 读取 routes/index.js
	const routesPath = path.resolve(__dirname, '../routes/index.js');

	if (!fs.existsSync(routesPath)) {
		throw new Error('routes/index.js 文件不存在');
	}

	// 读取文件内容
	const fileContent = fs.readFileSync(routesPath, 'utf-8');
	
	// 移除 export default，提取数组部分
	// 匹配 export default [...] 或 export default [\n...]
	const match = fileContent.match(/export\s+default\s+(\[[\s\S]*\])/);
	if (!match) {
		throw new Error('routes/index.js 格式不正确，无法解析 export default');
	}

	// 提取数组代码
	const routesCode = match[1];
	
	// 使用 Function 构造函数来执行代码并返回数组
	const getRoutes = new Function('return ' + routesCode);
	const routes = getRoutes();

	// 如果 routes 为空，抛出错误
	if (!Array.isArray(routes) || routes.length === 0) {
		throw new Error('routes/index.js 中必须至少包含一个路由配置');
	}

	// 读取现有的 pages.json（保留其他配置）
	const pagesJsonPath = path.resolve(__dirname, '../pages.json');
	let pagesJson = {
		globalStyle: {},
		uniIdRouter: {}
	};

	if (fs.existsSync(pagesJsonPath)) {
		const content = fs.readFileSync(pagesJsonPath, 'utf-8');
		pagesJson = JSON.parse(stripJsonComments(content));
	}

	// 转换 routes 为 pages 格式
	const pages = routes.map(route => {
		const page = {
			path: route.path,
			style: {
				navigationBarTitleText: route.meta?.title || '',
				...(route.style || {})
			}
		};
		return page;
	});

	// 更新 pages.json，保留其他字段
	pagesJson.pages = pages;

	// 写入文件
	fs.writeFileSync(pagesJsonPath, JSON.stringify(pagesJson, null, '\t'), 'utf-8');
	console.log('[pre-build] pages.json 已生成');
}

// 执行
console.log('[pre-build] 开始执行预构建脚本...');
generatePagesJson();
