const fs = require('fs');
const path = require('path');
const projectRoot = path.resolve(__dirname, '..');
const backendDir = path.resolve(projectRoot, 'src/backend');
const resTargetDir = path.resolve(backendDir, 'resources');
function copyRecursiveSync(src, dest) {
const stats = fs.statSync(src);
if (stats.isDirectory()) {
if (!fs.existsSync(dest)) {
fs.mkdirSync(dest, { recursive: true });
}
fs.readdirSync(src).forEach(childItemName => {
copyRecursiveSync(path.join(src, childItemName), path.join(dest, childItemName));
});
} else {
fs.copyFileSync(src, dest);
}
}
// Clean and recreate target directories
if (fs.existsSync(resTargetDir)) {
fs.rmSync(resTargetDir, { recursive: true, force: true });
}
fs.mkdirSync(resTargetDir, { recursive: true });
// 1. Copy DLLs from bin/ to backend/ (flat) - These go to the APP ROOT in MSI
const binDir = path.join(projectRoot, 'bin');
if (fs.existsSync(binDir)) {
fs.readdirSync(binDir).forEach(file => {
if (file.endsWith('.dll')) {
const src = path.join(binDir, file);
const dest = path.join(backendDir, file);
console.log(`Copying ${src} to ${dest}`);
fs.copyFileSync(src, dest);
}
});
}
// 2. Copy critical JSON files from root to resources/
['mcp.json', 'config.json'].forEach(file => {
const src = path.join(projectRoot, file);
if (fs.existsSync(src)) {
const dest = path.join(resTargetDir, file);
console.log(`Copying ${src} to ${dest}`);
fs.copyFileSync(src, dest);
}
});
// 3. Copy models/ to resources/models/
const modelsDir = path.join(projectRoot, 'models');
if (fs.existsSync(modelsDir)) {
const dest = path.join(resTargetDir, 'models');
console.log(`Copying ${modelsDir} to ${dest}`);
copyRecursiveSync(modelsDir, dest);
}
// 4. Copy everything from resources/ to backend/resources/ (preserving structure)
const resSrcDir = path.join(projectRoot, 'resources');
if (fs.existsSync(resSrcDir)) {
fs.readdirSync(resSrcDir).forEach(child => {
const src = path.join(resSrcDir, child);
const dest = path.join(resTargetDir, child);
console.log(`Copying ${src} to ${dest}`);
copyRecursiveSync(src, dest);
});
}
console.log('Resource preparation complete.');