#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
手机连接功能演示脚本
展示如何使用手机作为移动侦察设备
"""

import time
import json
import base64
import requests
from src import MobileConnector, config

def demo_mobile_functionality():
    """演示手机连接功能"""
    print("📱 手机连接功能演示")
    print("=" * 60)
    
    print("🎯 演示内容:")
    print("1. 启动手机连接服务器")
    print("2. 模拟手机客户端连接")
    print("3. 发送模拟数据")
    print("4. 展示数据处理流程")
    print()
    
    # 创建手机连接器
    mobile_connector = MobileConnector(port=8080)
    
    print("📱 正在启动手机连接服务器...")
    if mobile_connector.start_server():
        print("✅ 手机连接服务器启动成功")
        print(f"🌐 等待手机客户端连接到端口 8080")
        print()
        
        print("📖 使用说明:")
        print("1. 确保手机和电脑在同一网络")
        print("2. 在手机浏览器中访问:")
        print("   http://[电脑IP]:5000/mobile/mobile_client.html")
        print("3. 或者直接打开 mobile/mobile_client.html 文件")
        print("4. 点击'开始传输'按钮")
        print()
        
        print("🔧 获取电脑IP地址的方法:")
        print("Windows: ipconfig")
        print("Linux/Mac: ifconfig 或 ip addr show")
        print()
        
        # 设置回调函数来显示接收的数据
        def on_frame_received(device_id, frame, device):
            print(f"📷 收到设备 {device_id[:8]} 的图像帧")
            print(f"   分辨率: {frame.shape[1]}x{frame.shape[0]}")
            print(f"   设备: {device.device_name}")
            
        def on_location_received(device_id, location, device):
            lat, lng, accuracy = location
            print(f"📍 收到设备 {device_id[:8]} 的位置信息")
            print(f"   坐标: ({lat:.6f}, {lng:.6f})")
            print(f"   精度: {accuracy}m")
            
        def on_device_event(event_type, device):
            if event_type == 'device_connected':
                print(f"📱 设备连接: {device.device_name} ({device.device_id[:8]})")
                print(f"   电池: {device.battery_level}%")
            elif event_type == 'device_disconnected':
                print(f"📱 设备断开: {device.device_name} ({device.device_id[:8]})")
        
        # 注册回调函数
        mobile_connector.add_frame_callback(on_frame_received)
        mobile_connector.add_location_callback(on_location_received)
        mobile_connector.add_device_callback(on_device_event)
        
        print("⏳ 等待手机连接... (按 Ctrl+C 退出)")
        
        try:
            # 监控连接状态
            while True:
                time.sleep(5)
                
                # 显示统计信息
                stats = mobile_connector.get_statistics()
                online_devices = mobile_connector.get_online_devices()
                
                if stats['online_devices'] > 0:
                    print(f"\n📊 连接统计:")
                    print(f"   在线设备: {stats['online_devices']}")
                    print(f"   接收帧数: {stats['frames_received']}")
                    print(f"   数据量: {stats['data_received_mb']:.2f} MB")
                    print(f"   平均帧率: {stats['avg_frames_per_second']:.1f} FPS")
                    
                    print(f"\n📱 在线设备:")
                    for device in online_devices:
                        print(f"   • {device.device_name} ({device.device_id[:8]})")
                        print(f"     电池: {device.battery_level}%")
                        if device.current_location:
                            lat, lng, acc = device.current_location
                            print(f"     位置: ({lat:.6f}, {lng:.6f})")
                else:
                    print("⏳ 等待设备连接...")
                
        except KeyboardInterrupt:
            print("\n🔴 用户中断")
        
        finally:
            mobile_connector.stop_server()
            print("📱 手机连接服务器已停止")
    
    else:
        print("❌ 手机连接服务器启动失败")
        print("💡 可能的原因:")
        print("   - 端口 8080 已被占用")
        print("   - 网络权限问题")
        print("   - 防火墙阻止连接")

def test_mobile_api():
    """测试手机相关API"""
    print("\n🧪 测试手机API接口")
    print("=" * 40)
    
    base_url = "http://127.0.0.1:5000"
    
    try:
        # 测试ping接口
        test_data = {"device_id": "test_device_123"}
        response = requests.post(f"{base_url}/mobile/ping", 
                               json=test_data, timeout=5)
        
        if response.status_code == 200:
            data = response.json()
            print("✅ Ping API测试成功")
            print(f"   服务器时间: {data.get('server_time')}")
        else:
            print(f"❌ Ping API测试失败: HTTP {response.status_code}")
    
    except requests.exceptions.ConnectionError:
        print("⚠️ 无法连接到Web服务器")
        print("💡 请先启动Web服务器: python main_web.py")
    
    except Exception as e:
        print(f"❌ API测试出错: {e}")

def show_mobile_guide():
    """显示手机连接指南"""
    print("\n📖 手机连接步骤指南")
    print("=" * 40)
    
    print("1️⃣ 启动服务端:")
    print("   python main_web.py")
    print("   或 python run.py (选择Web模式)")
    print()
    
    print("2️⃣ 获取电脑IP地址:")
    print("   Windows: 打开CMD，输入 ipconfig")
    print("   Mac/Linux: 打开终端，输入 ifconfig")
    print("   记下IP地址，如: 192.168.1.100")
    print()
    
    print("3️⃣ 手机端连接:")
    print("   方法1: 浏览器访问 http://[IP]:5000/mobile/mobile_client.html")
    print("   方法2: 直接打开 mobile/mobile_client.html 文件")
    print()
    
    print("4️⃣ 开始传输:")
    print("   • 允许摄像头和位置权限")
    print("   • 点击'开始传输'按钮")
    print("   • 查看连接状态指示灯")
    print()
    
    print("5️⃣ 查看结果:")
    print("   • 在电脑Web界面查看地图")
    print("   • 观察实时检测结果")
    print("   • 监控设备状态")

if __name__ == "__main__":
    print("🚁 无人机战场态势感知系统 - 手机连接演示")
    print("=" * 60)
    
    while True:
        print("\n选择演示内容:")
        print("1. 📱 启动手机连接服务器")
        print("2. 🧪 测试手机API接口")
        print("3. 📖 查看连接指南")
        print("0. ❌ 退出")
        
        try:
            choice = input("\n请输入选择 (0-3): ").strip()
            
            if choice == "1":
                demo_mobile_functionality()
            elif choice == "2":
                test_mobile_api()
            elif choice == "3":
                show_mobile_guide()
            elif choice == "0":
                print("👋 再见!")
                break
            else:
                print("❌ 无效选择，请重新输入")
                
        except KeyboardInterrupt:
            print("\n👋 再见!")
            break
        except Exception as e:
            print(f"❌ 出错: {e}")
            
        input("\n按回车键继续...") 