/**
 * @file no-index-files.js
 * Bans index.ts/index.tsx files - they hide dependencies and make code harder to navigate
 */

module.exports = {
  meta: {
    type: 'problem',
    docs: {
      description: 'Ban index.ts/index.tsx files - use explicit imports instead',
      category: 'Best Practices',
      recommended: true,
    },
    fixable: null,
    schema: [],
    messages: {
      indexFile: 'Index files are banned. Use explicit imports and barrel exports. Example: Instead of "import { foo } from "./", use "import { foo } from "./foo" and export from "./foo" explicitly.',
    },
  },

  create(context) {
    const filename = context.getFilename();
    
    // Check if file is named index.ts or index.tsx
    const isIndexFile = /(^|\/|\\)index\.(ts|tsx)$/.test(filename);
    
    // Allow index files in root directories that are required by framework
    const allowedPaths = [
      'apps/website/app/index.ts', // Next.js app router entry
      'apps/website/pages/index.tsx', // Next.js pages router entry
      'apps/website/src/index.ts', // Common entry point
      'apps/website/index.ts', // Root entry
    ];
    
    // Check if the filename ends with any of the allowed paths
    // The filename is an absolute path, so we need to check if it contains the relative path
    const isAllowedPath = allowedPaths.some(allowedPath => {
      return filename.endsWith(allowedPath) || filename.includes('/' + allowedPath);
    });
    
    if (isIndexFile && !isAllowedPath) {
      context.report({
        node: null, // Report on the file level
        loc: { line: 1, column: 0 },
        messageId: 'indexFile',
      });
    }
    
    return {};
  },
};
