import pika
import os
import time
import json
from dotenv import load_dotenv
from db_config import get_db_connection  # You already have this
from sarvam_processor import process_call_id  # We'll use this soon

load_dotenv()

RABBITMQ_HOST = '10.0.0.109'
RABBITMQ_QUEUE = 'audio_jobs'
RABBITMQ_USER = 'mcube'
RABBITMQ_PASS = 'mcube@0121'
RABBITMQ_VHOST = 'vGadmin'  # Use vGadmin virtual host where mcube has access

def callback(ch, method, properties, body):
    try:
        # Parse JSON message containing callid and bid
        message_data = json.loads(body.decode())
        call_id = message_data['callid']
        bid = message_data['bid']
        print(f"Received call ID: {call_id}, bid: {bid}")
        
        # Call your existing logic here with both callid and bid
        process_call_id(call_id, bid)
        print(f"Processed call ID: {call_id} for bid: {bid}")
    except json.JSONDecodeError as e:
        print(f"Error parsing message: {e}")
        print(f"Raw message: {body.decode()}")
    except Exception as e:
        print(f"Error processing message: {e}")

    ch.basic_ack(delivery_tag=method.delivery_tag)

def start_consumer():
    credentials = pika.PlainCredentials(RABBITMQ_USER, RABBITMQ_PASS)
    connection = pika.BlockingConnection(
        pika.ConnectionParameters(
            host=RABBITMQ_HOST, 
            virtual_host=RABBITMQ_VHOST,
            credentials=credentials
        )
    )
    channel = connection.channel()
    channel.queue_declare(queue=RABBITMQ_QUEUE, durable=True)

    print(' [*] Waiting for messages. To exit press CTRL+C')
    channel.basic_qos(prefetch_count=100)
    channel.basic_consume(queue=RABBITMQ_QUEUE, on_message_callback=callback)
    channel.start_consuming()

if __name__ == "__main__":
    start_consumer()
