#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
RUL.confidence — готовый скрипт отправки данных для оборудования типа 'cnc_machine'.

1. Установите зависимость:
   pip install requests

2. Заполните переменные ниже или передайте через переменные окружения:
    RUL_API_KEY, RUL_SERVER_URL, RUL_ASSET_ID

3. Запустите:
   python send_cnc_machine.py
"""
import os
import time
import random
import requests

API_KEY = os.environ.get("RUL_API_KEY", "YOUR_API_KEY")
SERVER_URL = os.environ.get("RUL_SERVER_URL", "https://rulconf.ru")
ASSET_ID = os.environ.get("RUL_ASSET_ID", "cnc_machine_01")
SEND_INTERVAL = int(os.environ.get("RUL_INTERVAL", "60"))
PASSPORT_LIFE = os.environ.get("RUL_PASSPORT_LIFE", "20000")  # паспортный ресурс, ч
HOURS_RUN = os.environ.get("RUL_HOURS_RUN", "1000")  # наработка, ч

ENDPOINT = f"{SERVER_URL.rstrip('/')}/live/feed"

BASE_FEATURES = {
    "spindle_speed": 0.0,
    "spindle_load": 40.0,
    "spindle_temp": 45.0,
    "axis_position_error": 0.0,
    "axis_torque_x": 20.0,
    "axis_torque_y": 20.0,
    "axis_torque_z": 20.0,
    "coolant_temp": 40.0,
    "feed_rate": 500.0
}


def add_noise(value):
    """Небольшой шум, чтобы точки не были одинаковыми."""
    if isinstance(value, (int, float)):
        return round(value + random.uniform(-0.05, 0.05) * max(abs(value), 1.0), 3)
    return value


def send_point():
    features = {k: add_noise(v) for k, v in BASE_FEATURES.items()}
    payload = {
        "api_key": API_KEY,
        "equipment_id": ASSET_ID,
        "equipment": "cnc_machine",
        "features_dict": features,
    }
    if PASSPORT_LIFE:
        payload["passport_life"] = float(PASSPORT_LIFE)
    if HOURS_RUN:
        payload["hours_run"] = float(HOURS_RUN)
    try:
        response = requests.post(ENDPOINT, json=payload, timeout=10)
        data = response.json()
        print(f"[{response.status_code}] RUL={data.get('rul', '?')}, риск={data.get('risk', '?')}")
    except Exception as e:
        print(f"[ERROR] {e}")


if __name__ == "__main__":
    print(f"Отправка данных на {ENDPOINT} каждые {SEND_INTERVAL} сек...")
    while True:
        send_point()
        time.sleep(SEND_INTERVAL)
