#!/usr/bin/env python3
"""
Precomputed config validator - uses 2D array lookup.
Profile this to see clean array indexing with no wrapper overhead.

Usage:
    python3 config_validator_precomputed.py
    python3 -m cProfile -s tottime config_validator_precomputed.py
"""

import time

from common import validate_rule_slow, load_events, RULES, EVENT_TYPES


def build_validation_table():
    """
    Build a 2D lookup table for all possible (rule_id, event_type) combinations.
    Array indexing is faster than hash-based lookup because:
    - No hash computation needed
    - Direct memory offset calculation
    - Better CPU cache locality
    """
    table = []
    for rule_id in range(max(RULES) + 1):
        row = []
        for event_type in range(max(EVENT_TYPES) + 1):
            row.append(validate_rule_slow(rule_id, event_type))
        table.append(row)
    return table


# Build table at module load time (simulates startup initialization)
VALIDATION_TABLE = build_validation_table()


def process_events(events):
    """Process events using precomputed 2D lookup table."""
    valid_count = 0
    for rule_id, event_type, data in events:
        if VALIDATION_TABLE[rule_id][event_type]:
            valid_count += 1
    return valid_count


ITERATIONS = 5


def main():
    events = load_events()
    print(f"Processing {len(events)} events (precomputed), {ITERATIONS} iterations...")

    times = []
    for _ in range(ITERATIONS):
        start = time.perf_counter()
        valid_count = process_events(events)
        times.append(time.perf_counter() - start)

    avg = sum(times) / len(times)
    print(f"Valid: {valid_count}")
    print(f"Avg time: {avg:.3f}s")


if __name__ == "__main__":
    main()
