/**
 * @fileoverview Simple Parser Tests - Basic functionality tests
 */

import { describe, expect, it } from 'vitest';
import { OrdoJSLexer } from './lexer.js';
import { OrdoJSParser } from './parser.js';

describe('OrdoJSParser - Basic Tests', () => {
  it('should parse minimal component', () => {
    const source = `
      component TestComponent {
        markup {
          <div>Hello World</div>
        }
      }
    `;

    const lexer = new OrdoJSLexer(source, 'test.ordo');
    const tokens = lexer.tokenize();
    const parser = new OrdoJSParser(tokens, {}, 'test.ordo');
    const ast = parser.parse();

    expect(ast.component.name).toBe('TestComponent');
    expect(ast.component.type).toBe('Component');
    expect(ast.component.markupBlock).toBeDefined();
  });

  it('should parse component with reactive variable', () => {
    const source = `
      component TestComponent {
        client {
          let count = 0;
        }
        markup {
          <div>{count}</div>
        }
      }
    `;

    const lexer = new OrdoJSLexer(source, 'test.ordo');
    const tokens = lexer.tokenize();
    const parser = new OrdoJSParser(tokens, {}, 'test.ordo');
    const ast = parser.parse();

    expect(ast.component.clientBlock).toBeDefined();
    expect(ast.component.clientBlock!.reactiveVariables).toHaveLength(1);
    expect(ast.component.clientBlock!.reactiveVariables[0].name).toBe('count');
  });
});
