"""Build a Bell-style circuit and interpret its sampled result.

This beginner lesson introduces the fluent ``Circuit`` builder, terminal
measurement, deterministic local execution, and bit-order metadata. Always
read the bit order before assigning physical meaning to a bitstring.
"""

from __future__ import annotations

import json

from cascaqit import Circuit


def main() -> None:
    """Execute a two-qubit entangling circuit with a fixed seed."""
    # H creates a superposition; CX correlates q1 with q0.
    circuit = Circuit(2, program_id="lesson.digital.beginner")
    circuit.h(0).cx(0, 1).measure_all(key="readout")

    # Circuit.run is the shortest local Digital path for a first experiment.
    result = circuit.run(shots=32, seed=201, return_probabilities=True)
    program = circuit.to_program()

    payload = {
        "track": "digital_developer",
        "level": "beginner",
        "lesson": "bell_circuit",
        "facts": {
            "gate_names": [
                operation.definition.name
                for operation in program.circuit.operations
                if operation.definition.name != "measure"
            ],
            "counts_total": sum(result.counts.values()),
            "probability_states": sorted((result.probabilities or {}).keys()),
            "bit_order": result.metadata["bitstring_ordering"]["qubit_order"],
            "measurement_key": program.circuit.classical_registers[0].register_id,
        },
        "boundaries": {
            "hardware_execution": False,
            "cloud_execution": False,
            "network_accessed": False,
            "credentials_loaded": False,
        },
    }
    print(json.dumps(payload, sort_keys=True))


if __name__ == "__main__":
    main()
