/**
 * ESLint rule to enforce that Presenters are NOT used
 *
 * Presenters are deprecated and replaced with Builders.
 * This rule flags any file ending with "Presenter" as an error.
 */

module.exports = {
  meta: {
    type: 'problem',
    docs: {
      description: 'Prevent use of deprecated Presenter pattern',
      category: 'Best Practices',
      recommended: true,
    },
    fixable: null,
    schema: [],
    messages: {
      presenterDeprecated: 'Presenters are deprecated. Use Builder pattern instead. See apps/website/lib/contracts/builders/Builder.ts',
    },
  },

  create(context) {
    return {
      // Check for any file ending with "Presenter"
      Program(node) {
        const filename = context.getFilename();
        
        // Check if filename ends with Presenter.ts or Presenter.tsx
        if (filename.endsWith('Presenter.ts') || filename.endsWith('Presenter.tsx')) {
          context.report({
            node,
            messageId: 'presenterDeprecated',
          });
        }
      },
      
      // Also check class declarations ending with Presenter
      ClassDeclaration(node) {
        const className = node.id?.name;
        
        if (className && className.endsWith('Presenter')) {
          context.report({
            node,
            messageId: 'presenterDeprecated',
          });
        }
      },
    };
  },
};