import paho.mqtt.client as mqtt
import requests
import json

BROKER_ADDRESS = "127.0.0.1" 
SUBSCRIBE_TOPIC = "factory/+/spec"

def on_message(client, userdata, msg):
    try:
        # 1. 터치 데이터 파싱
        payload = json.loads(msg.payload.decode())
        val = payload.get("value")
        
        # 2. 유연한 데이터 추출 (리스트면 첫번째 항목, 문자열이면 그대로 사용)
        if isinstance(val, list) and len(val) > 0:
            num_value = str(val[0]).strip()
        else:
            num_value = str(val).strip()

        if not num_value or num_value == "None":
            print(f"조회 값이 없습니다: {payload}")
            return
            
        install_name = msg.topic.split('/')[1]

        # 3. API 호출
        api_base_url = "http://139.150.80.62/manufacture/lot/external/?"
        query_params = {'num': num_value}
        
        response = requests.get(api_base_url, params=query_params, timeout=5)
        
        print(f"[{install_name}] 호출 URL: {response.url}")
        
        api_result = response.json()
        
        # 4. 결과 회신
        if "data" in api_result and api_result["data"]:
            response_topic = f"factory/{install_name}/data"
            client.publish(response_topic, json.dumps(api_result["data"]))
            print(f"[{install_name}] 회신 완료: {api_result['data']}")
        else:
            print(f"[{install_name}] 조회 결과 없음 (Exists 아님)")

    except Exception as e:
        print(f"에러 발생: {e}")

client = mqtt.Client()
client.on_message = on_message
client.connect(BROKER_ADDRESS, 1883)
client.subscribe(SUBSCRIBE_TOPIC)
print("서버 재시작 완료 (모든 데이터 형식 대응)...")
client.loop_forever()

