import requests
import os
import sys

def test_ocr_service(image_path, server_url="http://127.0.0.1:8085/predict/vfcode"):
    """
    读取本地图片并发送给 OCR 服务进行识别
    """
    # 1. 检查文件是否存在
    if not os.path.exists(image_path):
        print(f"[错误] 找不到文件: {image_path}")
        return

    print(f"[INFO] 正在读取图片: {image_path}")
    print(f"[INFO] 目标服务器: {server_url}")

    try:
        # 2. 读取图片二进制数据
        with open(image_path, 'rb') as f:
            image_data = f.read()

        # 3. 发送 POST 请求
        # 注意：这里直接发送二进制流 (data=image_data)，配合之前的 predict_server.py 使用
        # 如果服务端要求 multipart/form-data，则需要用 files={'file': f}
        start_time = time.time()
        response = requests.post(
            server_url, 
            data=image_data,
            headers={"Content-Type": "application/octet-stream"}, # 标识为二进制流
            timeout=10
        )
        cost_time = (time.time() - start_time) * 1000

        # 4. 解析响应
        if response.status_code == 200:
            result = response.json()
            ocr_text = result.get('data', '').replace('$', '') # 去除可能存在的结束符
            
            print("-" * 40)
            print(f"✅ 识别成功")
            print(f"📸 结果: {ocr_text}")
            print(f"⏱️ 耗时: {cost_time:.2f} ms")
            print(f"📩 原始响应: {result}")
            print("-" * 40)
        else:
            print(f"[失败] 服务器返回状态码: {response.status_code}")
            print(f"响应内容: {response.text}")

    except requests.exceptions.ConnectionError:
        print("[错误] 无法连接到服务器。请确认 predict_server.py 正在运行且端口正确。")
    except Exception as e:
        print(f"[错误] 发生异常: {e}")

if __name__ == "__main__":
    import time
    
    # --- 配置 ---
    SERVER_URL = "http://127.0.0.1:8085/predict/vfcode"
    
    # 默认测试图片路径 (请修改为你本地实际存在的验证码图片路径)
    # 你可以放一张图片在当前目录下，命名为 test.jpg
    DEFAULT_IMAGE = "output.png" 

    # 支持命令行参数: python test_ocr_client.py my_image.png
    if len(sys.argv) > 1:
        image_file = sys.argv[1]
    else:
        image_file = DEFAULT_IMAGE

    # 如果默认图片不存在，尝试在 test 目录下找一个
    if not os.path.exists(image_file):
        if os.path.exists("test/562_xxxx.gif"): # 假设你的项目结构里有这个
            image_file = "test/562_xxxx.gif"
        elif os.path.exists("data/captcha.jpg"):
            image_file = "data/captcha.jpg"

    # 开始测试
    test_ocr_service(image_file, SERVER_URL)