from qiskit_ibm_runtime import QiskitRuntimeService, Sampler

def run_on_ibm_quantum(shots=4096):
    """
    Rulează experimentul pe hardware IBM Quantum real
    NOTĂ: Necesită cont IBM Quantum și token valid
    """
    
    # Setup service
    service = QiskitRuntimeService(
        channel='ibm_quantum',
        # token='YOUR_IBM_QUANTUM_TOKEN'  # Uncomment și adaugă token
    )
    
    # Selectează backend
    backend = service.least_busy(operational=True, simulator=False)
    print(f"Running on: {backend.name}")
    
    # Create circuits
    exp = NonlocalCommunicationExperiment(shots=shots)
    qc_ww = exp.which_way_measurement()
    qc_int = exp.interference_measurement()
    
    # Transpile pentru backend
    from qiskit import transpile
    qc_ww_t = transpile(qc_ww, backend, optimization_level=3)
    qc_int_t = transpile(qc_int, backend, optimization_level=3)
    
    # Run cu Sampler
    sampler = Sampler(backend)
    
    print("Running which-way circuit...")
    job_ww = sampler.run([qc_ww_t], shots=shots)
    result_ww = job_ww.result()
    
    print("Running interference circuit...")
    job_int = sampler.run([qc_int_t], shots=shots)
    result_int = job_int.result()
    
    # Extract counts (sintaxă diferită pentru Sampler)
    # counts_ww = result_ww.quasi_dists[0].binary_probabilities()
    # counts_int = result_int.quasi_dists[0].binary_probabilities()
    
    # Analiză similar ca înainte...
    
    return result_ww, result_int

# Pentru testare, rulează pe simulator local:
# experiment = NonlocalCommunicationExperiment(shots=10000)
# results = experiment.compare_measurements()
