#!/usr/bin/env python3
"""假的 WeMM-Embedding 占位服务

用于测试和开发阶段，提供与真实 WeMM-Embedding 兼容的接口。
真实服务部署到 GPU 机器后，替换此实现即可。

API 端点:
- POST /embed - 生成文本向量
- POST /health - 健康检查
"""

from http.server import HTTPServer, BaseHTTPRequestHandler
import json
import hashlib
import sys
import signal

class FakeWeMMHandler(BaseHTTPRequestHandler):
    """假的 WeMM-Embedding API 处理器"""

    def do_POST(self):
        if self.path == '/embed':
            content_length = int(self.headers['Content-Length'])
            post_data = self.rfile.read(content_length)

            try:
                data = json.loads(post_data)
                text = data.get('text', '')

                # 生成假向量（基于文本哈希，保持一致性）
                hash_obj = hashlib.sha256(text.encode('utf-8'))
                # 生成 768 维向量（模拟 WeMM-Embedding-v1）
                vector = []
                for i in range(768):
                    # 基于哈希值生成伪随机向量
                    byte_index = (i * 4) % len(hash_obj.digest())
                    vector.append((ord(hash_obj.digest()[byte_index]) / 255.0) - 0.5)

                # 归一化
                magnitude = sum(v*v for v in vector) ** 0.5
                if magnitude > 0:
                    vector = [v/magnitude for v in vector]

                response = {
                    'success': True,
                    'vector': vector,
                    'dimension': 768,
                    'model': 'wemm-embedding-v1-fake'
                }

                self.send_response(200)
                self.send_header('Content-Type', 'application/json')
                self.end_headers()
                self.wfile.write(json.dumps(response).encode('utf-8'))

            except Exception as e:
                self.send_response(500)
                self.send_header('Content-Type', 'application/json')
                self.end_headers()
                self.wfile.write(json.dumps({'error': str(e)}).encode('utf-8'))

        elif self.path == '/health':
            self.send_response(200)
            self.send_header('Content-Type', 'application/json')
            self.end_headers()
            self.wfile.write(json.dumps({
                'status': 'ok',
                'model': 'fake-wemm-embedding',
                'dimensions': 768
            }).encode('utf-8'))

        else:
            self.send_response(404)
            self.end_headers()

    def log_message(self, format, *args):
        """静默日志"""
        pass


def main():
    port = 8765
    server = HTTPServer(('localhost', port), FakeWeMMHandler)

    print(f"🤖 假的 WeMM-Embedding 服务启动于 http://localhost:{port}")
    print(f"   - POST /embed - 生成文本向量（768维）")
    print(f"   - POST /health - 健康检查")
    print(f"   提示: 这是占位服务，真实服务需部署到 GPU 机器")
    print()

    def handle_exit(signum, frame):
        print("\n🛑 WeMM-Embedding 服务已停止")
        sys.exit(0)

    signal.signal(signal.SIGINT, handle_exit)
    signal.signal(signal.SIGTERM, handle_exit)

    try:
        server.serve_forever()
    except KeyboardInterrupt:
        handle_exit(None, None)


if __name__ == '__main__':
    main()
