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

// Get all TypeScript files in a directory recursively
function getTypeScriptFiles(dir) {
  const files = [];
  
  function traverse(currentDir) {
    const entries = fs.readdirSync(currentDir, { withFileTypes: true });
    
    for (const entry of entries) {
      const fullPath = path.join(currentDir, entry.name);
      
      if (entry.isDirectory()) {
        traverse(fullPath);
      } else if (entry.isFile() && entry.name.endsWith('.ts')) {
        files.push(fullPath);
      }
    }
  }
  
  traverse(dir);
  return files;
}

// Fix imports in a file
function fixImportsInFile(filePath) {
  console.log(`Processing ${filePath}`);
  let content = fs.readFileSync(filePath, 'utf8');
  
  // Regular expression to match relative imports without file extensions
  const importRegex = /(import\s+(?:[^'"]*\s+from\s+)?['"])(\.\.[^'"]*?)(['"])/g;
  
  // Add .js extension to relative imports
  content = content.replace(importRegex, (match, start, importPath, end) => {
    // Don't add extension if it already has one or ends with a directory
    if (importPath.endsWith('.js') || importPath.endsWith('/')) {
      return match;
    }
    return `${start}${importPath}.js${end}`;
  });
  
  fs.writeFileSync(filePath, content);
}

// Main function
function main() {
  const srcDir = path.join(__dirname, '..', 'src');
  const files = getTypeScriptFiles(srcDir);
  
  console.log(`Found ${files.length} TypeScript files`);
  
  for (const file of files) {
    fixImportsInFile(file);
  }
  
  console.log('Done');
}

main();
