import cv2
import pygame
from pyzbar.pyzbar import decode

# Initialize pygame for audio playback
pygame.mixer.init()
print("Pygame initialized.")

# Function to play audio
def play_audio(file_path):
    print(f"Attempting to play audio: {file_path}")
    pygame.mixer.music.load(file_path)
    pygame.mixer.music.play()
    while pygame.mixer.music.get_busy():
        continue
    print("Finished playing audio.")

# Capture video from camera
cap = cv2.VideoCapture(0)
if not cap.isOpened():
    print("Error: Could not access the camera.")
    exit()

print("Camera accessed successfully.")

while True:
    ret, frame = cap.read()
    if not ret:
        print("Failed to grab frame.")
        break

    # Decode the QR code in the frame
    decoded_objects = decode(frame)
    if decoded_objects:
        print(f"Decoded {len(decoded_objects)} QR code(s).")
    
    for obj in decoded_objects:
        qr_data = obj.data.decode('utf-8')
        print(f"QR Code detected, data: {qr_data}")

        # Check if the QR code content is "hydrosense"
        if qr_data == "hydrosense":
            audio_file_path = "/home/pi/audio/hydrosense.mp3"  # Modify this path if needed
            play_audio(audio_file_path)
    
    # Display the frame
    cv2.imshow("QR Code Scanner", frame)

    # Break the loop if 'q' is pressed
    if cv2.waitKey(1) & 0xFF == ord('q'):
        print("Exiting.")
        break

# Release the capture and close windows
cap.release()
cv2.destroyAllWindows()
print("Camera released and windows closed.")
