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

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

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

3. Запустите:
   python send_truck.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", "truck_01")
SEND_INTERVAL = int(os.environ.get("RUL_INTERVAL", "60"))
PASSPORT_LIFE = os.environ.get("RUL_PASSPORT_LIFE", "15000")  # паспортный ресурс, ч
HOURS_RUN = os.environ.get("RUL_HOURS_RUN", "1000")  # наработка, ч

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

BASE_FEATURES = {
    "mileage": 50000,
    "engine_hours": 1000,
    "fuel_used": 0.0,
    "engine_load": 70.0,
    "engine_speed": 1800.0,
    "coolant_temp": 40.0,
    "oil_pressure": 4.0,
    "fuel_rate": 25.0,
    "brake_pressure": 5.0,
    "wheel_speed": 60.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": "truck",
        "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)
