import requests
import json
import time
import uuid

# API endpoint
url = "https://config.mcube.com/Restmcube-api/outbound-calls-superdash"

# Headers
headers = {
    "Content-Type": "application/json"
}

# List of contact numbers to call
contact_numbers = [
    "7004670611",  #rushab
    # "9036695334",  #sara
    # "7780787875",  #gnaneshwar
    # "9538968567",  #ganesh
    # "8249241195",  #digambar  
    # "8667434910",  #kowsalya
    # "6291861231",  #oliva
    # "9014742697",  #parvathi
    # "9080876134", #anu
    # "8102519239"  #subbu
]

# Verify all numbers are loaded
print(f"Loaded {len(contact_numbers)} contact numbers:")
for i, num in enumerate(contact_numbers, 1):
    print(f"  {i}. {num}")
print()

# Base payload template (session UUID will be generated per call)
base_payload = {
    "Authorization": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJUSEVfQ0xBSU0iLCJhdWQiOiJUSEVfQVVESUVOQ0UiLCJpYXQiOjE3NjQyMjc0NzMsImV4cF9kYXRhIjoxNzk1Nzg1MDczLCJkYXRhIjp7ImJ1c2luZXNzX2lkIjo4MDI4LCJidXNpbmVzc19uYW1lIjoiVm9pY2VCb3QgUHJvZHVjdCBUZWFtIn19.azEqvESyuP1GJoLWrww3GTfgaYOfg1oBrqZTnWHdKhY",
    "exenumber": "7857069992"
}

# Function to format phone number (add +91 prefix if not present)
def format_phone_number(number):
    number = str(number).strip()
    if not number.startswith('+'):
        if number.startswith('91'):
            return '+' + number
        else:
            return '+91' + number
    return number

# Make POST requests for each contact number
print(f"Total contacts to call: {len(contact_numbers)}")
print("=" * 60)

successful_calls = 0
failed_calls = 0

for index, number in enumerate(contact_numbers, 1):
    # Generate a unique UUID for this call's session
    session_uuid = str(uuid.uuid4())
    
    # Format the phone number
    formatted_number = format_phone_number(number)
    
    # Create payload for this call
    payload = base_payload.copy()
    payload["custnumber"] = formatted_number
    payload["refurl"] = f"ws://10.0.0.109:7900/ws/{session_uuid}"
    
    print(f"\n[{index}/{len(contact_numbers)}] Calling: {formatted_number}")
    print(f"Original number: {number}")
    print(f"Session UUID: {session_uuid}")
    print("-" * 60)
    
    try:
        response = requests.post(url, headers=headers, json=payload, timeout=30)
        
        # Print response status code
        print(f"Status Code: {response.status_code}")
        
        if response.status_code == 200:
            print(f"Status: ✓ Success")
            successful_calls += 1
        else:
            print(f"Status: ✗ Error (Status Code: {response.status_code})")
            failed_calls += 1
        
        # Print response body
        if response.text:
            try:
                response_json = response.json()
                print(f"Response: {json.dumps(response_json, indent=2)}")
            except json.JSONDecodeError:
                print(f"Response: {response.text}")
        else:
            print("Response: (Empty response body)")
            
    except requests.exceptions.Timeout:
        print(f"✗ Error: Request timeout")
        failed_calls += 1
    except requests.exceptions.RequestException as e:
        print(f"✗ Error making request: {e}")
        failed_calls += 1
    except Exception as e:
        print(f"✗ Unexpected error: {e}")
        failed_calls += 1
    
    # Add 2-second delay before next call (except after the last one)
    if index < len(contact_numbers):
        print(f"\nWaiting 2 seconds before next call...")
        time.sleep(2)
    else:
        print(f"\nLast call completed. No delay needed.")

print("\n" + "=" * 60)
print(f"Summary:")
print(f"  Total contacts: {len(contact_numbers)}")
print(f"  Successful calls: {successful_calls}")
print(f"  Failed calls: {failed_calls}")
print(f"  Total attempted: {successful_calls + failed_calls}")
print("=" * 60)
print("All calls completed!")