from machine import Pin
from time import sleep_ms, sleep
from hx711 import HX711
import network, time
import ujson
from umqtt.simple import MQTTClient
MQTT_CLIENT_ID = "fruver333tFFFFORsant"
MQTT_BROKER    = "test.mosquitto.org"
MQTT_USER      = ""
MQTT_PASSWORD  = ""
MQTT_TOPIC_SUB = "reconocimiento/fruver"
DATA_PIN = 5
CLOCK_PIN = 17
hx = HX711(dout=DATA_PIN, pd_sck=CLOCK_PIN)
FACTOR_CALIBRACION = 2100/5  # Este valor debe ser ajustado según la calibración
TIEMPO_ESPERA = 500  # en milisegundos
precios = {
    "mango_tommy": 1450,
    "granadilla": 2570,
}
def conectaWifi(red, password):
    global miRed
    miRed = network.WLAN(network.STA_IF)
    if not miRed.isconnected():
        miRed.active(True)
        miRed.connect(red, password)
        print('Conectando a la red', red + "…")
        timeout = time.time()
        while not miRed.isconnected():
            if (time.ticks_diff(time.time(), timeout) > 10):
                return False
    return True
# --------------------------
# Función para imprimir factura
# --------------------------
def imprimir_factura(producto, peso_kg, costo_total):
    print("+-------------------------------------------+")
    print("|             SUPER FRUVER                  |")
    print("+-------------------------------------------+")
    print(f"| Producto     : {producto:<30} |")
    print(f"| Peso (kg)    : {peso_kg:.1f}{'':<26} |")
    print(f"| Precio total : ${costo_total:.1f}{'':<23} |")
    print("+-------------------------------------------+")
# --------------------------
# Lógica principal
# --------------------------
if conectaWifi("Wokwi-GUEST", ""):
    print("Conexión exitosa!")
    print('Datos de la red (IP/netmask/gw/DNS):', miRed.ifconfig())
    print("Conectando a MQTT server... ", MQTT_BROKER, "...", end="")
    client = MQTTClient(MQTT_CLIENT_ID, MQTT_BROKER, user=MQTT_USER, password=MQTT_PASSWORD)
    client.connect()
    def sub_cb(topic, msg):
        dato = ujson.loads(msg.decode())
        r = dato["Producto"]
        valor_crudo = hx.read()
        peso_kg = valor_crudo / FACTOR_CALIBRACION
        if r in precios:
            costo_total = peso_kg * precios[r]
            imprimir_factura(r, peso_kg, costo_total)
        else:
            print(f"Producto '{r}' no reconocido.")
    while True:
        client.set_callback(sub_cb)
        client.subscribe(MQTT_TOPIC_SUB)
        print("Esperando mensaje MQTT...")
        client.wait_msg()
        time.sleep(3)