import logging
from flask import Flask, request, jsonify, render_template
from mysql_connect import get_data_dict
from mqtt import MQTTClient
import time

# 配置日志记录器
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')

app = Flask(__name__)

# 获取 data_dict
data_dict = get_data_dict()

# 获取所有公司的ID
company_ids = set(row['roommaster_company_id'] for rows in data_dict.values() for row in rows)

# 创建MQTT客户端实例
mqtt_client = MQTTClient('config.json')

# 启动MQTT客户端
mqtt_client.start()

# 获取 MQTT 客户端对象和主题
mqtt_client_obj = mqtt_client.client
topic_publish = "/maintain/room/master/client/"
topic_publish_online = "/maintain/room/master/client/online/"

@app.route('/')
def index():
    return render_template('index.html', company_ids=sorted(company_ids))

@app.route('/get_regions', methods=['GET'])
def get_regions():
    company_id = int(request.args.get('company_id'))
    logging.debug(f"收到公司ID: {company_id}")
    regions = set()
    for row in data_dict.get(company_id, []):
        regions.add((row['roommaster_id'], row['roommaster_name']))
    return jsonify(list(regions))

@app.route('/get_devices', methods=['GET'])
def get_devices():
    region_ids = request.args.get('region_ids')
    logging.debug(f"收到区域ID: {region_ids}")
    region_ids = [int(id) for id in region_ids.split(',')]
    devices = []
    for company_id, rows in data_dict.items():
        for row in rows:
            if row['roommaster_id'] in region_ids:
                devices.append({
                    'device_id': row['roomdevice_udid'],
                    'device_name': row['roomdevice_name']
                })
    return jsonify(devices)

@app.route('/toggle_power', methods=['POST'])
def toggle_power():
    data = request.json
    regions = data.get('regions', [])
    on = data.get('on', False)
    logging.debug(f"收到请求参数: regions={regions}, on={on}")
    if not regions:
        logging.warning("未收到任何区域信息")
    else:
        for region in regions:
            roommaster_udid = get_roommaster_udid(region)
            if roommaster_udid:
                payload = {"udid": roommaster_udid, "action": "power", "value": 1 if on else 0}
                logging.debug(f"调用 mqtt.open_conference_room 区域: {region}, payload: {payload}")
                result = mqtt_client.open_conference_room(topic_publish, payload)
                logging.debug(f"mqtt.open_conference_room 的结果: {result}")
            else:
                logging.warning(f"未找到区域 {region} 对应的 roommaster_udid")
    return jsonify({'success': True})

@app.route('/toggle_status', methods=['POST'])
def toggle_status():
    data = request.json
    regions = data.get('regions', [])
    online = data.get('online', False)
    logging.debug(f"收到请求参数: regions={regions}, online={online}")
    if not regions:
        logging.warning("未收到任何区域信息")
    else:
        for region in regions:
            roommaster_udid = get_roommaster_udid(region)
            if roommaster_udid:
                payload = {"udid": roommaster_udid, "action": "status", "value": 1 if online else 0}
                logging.debug(f"调用 mqtt.conference_room_online 区域: {region}, payload: {payload}")
                if online:
                    result = mqtt_client.conference_room_online(topic_publish_online, payload)
                else:
                    result = mqtt_client.conference_room_offline(topic_publish_online, payload)
                logging.debug(f"mqtt.conference_room_online/offline 的结果: {result}")
            else:
                logging.warning(f"未找到区域 {region} 对应的 roommaster_udid")
    return jsonify({'success': True})

def get_roommaster_udid(roommaster_id):
    for rows in data_dict.values():
        for row in rows:
            if row['roommaster_id'] == roommaster_id:
                return row['roommaster_udid']
    return None

if __name__ == '__main__':
    try:
        app.run(debug=True)
    except KeyboardInterrupt:
        logging.info("已手动中断Flask应用进程!")
    finally:
        # 停止MQTT客户端
        mqtt_client.stop()