#!/usr/bin/env python3
"""
Measure TTFB with detailed per-chunk timing
"""

import requests
import time

API_URL = "http://localhost:8000/v1/tts/generate"

def measure_streaming_with_all_chunks(text="Hello world, this is a test.", speaker="lipakshi"):
    """
    Measure TTFB showing ALL chunks received
    """
    print("\n" + "="*80)
    print("📊 DETAILED PER-CHUNK MEASUREMENT")
    print("="*80)
    
    payload = {
        "text": text,
        "speaker": speaker,
        "stream": True,
        "format": "wav"
    }
    
    headers = {"Content-Type": "application/json"}
    
    t0 = time.time()
    print(f"\n⏰ T+{0:.3f}s - Request initiated")
    
    response = requests.post(API_URL, json=payload, headers=headers, stream=True, timeout=30)
    
    t1 = time.time() - t0
    print(f"⏰ T+{t1:.3f}s - Headers received (HTTP {response.status_code})")
    
    if response.status_code != 200:
        print(f"❌ Error: {response.status_code}")
        return
    
    chunk_times = []
    chunk_sizes = []
    total_bytes = 0
    
    print(f"\n📦 Receiving chunks:")
    for i, chunk in enumerate(response.iter_content(chunk_size=None)):
        if chunk:
            t_chunk = time.time() - t0
            chunk_times.append(t_chunk)
            chunk_sizes.append(len(chunk))
            total_bytes += len(chunk)
            
            # Show first 10 chunks and then every 10th
            if i < 10 or i % 10 == 0:
                content_type = ""
                if i == 0 and chunk.startswith(b'RIFF'):
                    content_type = " [WAV header]"
                elif i == 0:
                    content_type = " [Audio data]"
                    
                print(f"   #{i+1:3d} @ T+{t_chunk:.3f}s: {len(chunk):>6,} bytes{content_type}")
    
    t_end = time.time() - t0
    
    print(f"\n📊 SUMMARY:")
    print(f"   ├─ Total chunks:          {len(chunk_times)}")
    print(f"   ├─ Total bytes:           {total_bytes:,}")
    print(f"   ├─ First chunk (TTFB):    T+{chunk_times[0]:.3f}s = {chunk_times[0]*1000:.0f}ms")
    if len(chunk_times) > 1:
        print(f"   ├─ Second chunk:          T+{chunk_times[1]:.3f}s = {chunk_times[1]*1000:.0f}ms")
        print(f"   ├─ Delta (chunk 1→2):     {(chunk_times[1] - chunk_times[0])*1000:.0f}ms")
    print(f"   └─ Total time:            T+{t_end:.3f}s = {t_end*1000:.0f}ms")
    
    print(f"\n💡 INSIGHT:")
    if chunk_sizes[0] == 44:
        print(f"   First chunk is WAV header (44 bytes) - true audio starts at chunk #2")
        if len(chunk_times) > 1:
            print(f"   TRUE HEARABLE AUDIO TTFB: {chunk_times[1]*1000:.0f}ms")
    else:
        print(f"   First chunk contains audio data")
        print(f"   TRUE HEARABLE AUDIO TTFB: {chunk_times[0]*1000:.0f}ms")


if __name__ == "__main__":
    measure_streaming_with_all_chunks()

