#!/usr/bin/env python3
"""
滑块验证码识别器 - 使用 no-puzzle-captcha 库
https://github.com/isHarryh/No-Puzzle-Captcha
"""

import sys
import json
import base64
from no_puzzle_captcha import PuzzleCaptchaSolver


def solve_captcha(bg_base64: str, slide_base64: str) -> dict:
    """
    识别滑块验证码缺口位置

    Args:
        bg_base64: 背景图 base64 编码
        slide_base64: 滑块图 base64 编码

    Returns:
        dict: {x: int, y: int, elapsed: float}
    """
    # 解码图片
    bg_bytes = base64.b64decode(bg_base64)
    slide_bytes = base64.b64decode(slide_base64)

    # 使用 no-puzzle-captcha 库
    solver = PuzzleCaptchaSolver()
    result = solver.handle_bytes(bg_bytes, slide_bytes)

    return {
        "x": result.x,
        "y": result.y,
        "elapsed": result.elapsed_time
    }


def solve_from_files(bg_path: str, slide_path: str) -> dict:
    """从文件路径识别"""
    solver = PuzzleCaptchaSolver()
    result = solver.handle_file(bg_path, slide_path)

    return {
        "x": result.x,
        "y": result.y,
        "elapsed": result.elapsed_time
    }


def main():
    """命令行入口"""
    if len(sys.argv) < 2:
        print(json.dumps({"error": "用法: python captcha_solver.py --files <bg> <slide>"}))
        sys.exit(1)

    if sys.argv[1] == '--files' and len(sys.argv) >= 4:
        result = solve_from_files(sys.argv[2], sys.argv[3])
    elif len(sys.argv) >= 3:
        result = solve_captcha(sys.argv[1], sys.argv[2])
    else:
        try:
            data = json.loads(sys.stdin.read())
            result = solve_captcha(data['backImage'], data['slidingImage'])
        except Exception as e:
            result = {"error": str(e)}

    print(json.dumps(result))


if __name__ == '__main__':
    main()
