<?php
session_start();
header('Content-Type: application/json; charset=utf-8');
$f='/var/www/0000/database/inventario.json';
$inv=json_decode(@file_get_contents($f),true)?:[];
$raw=file_get_contents('php://input');
$d=json_decode($raw,true);
$msg=trim($d['msg']??$raw);
$q=strtolower($msg);
$cliente_id = trim($d['cliente_id']??'anon');
if(!isset($_SESSION['hz'])) $_SESSION['hz']=['step'=>0,'prod'=>null,'cant'=>0,'datos'=>[]];
$hz=&$_SESSION['hz'];

function buscarConocimiento($q){
  $file='/var/www/0000/database/bot_conocimiento.json';
  $data=json_decode(@file_get_contents($file),true)?:[];
  $q=strtolower(trim($q));

  if($q==='') return null;

  $best=null;
  $bestScore=0;

  foreach($data as $k){
    if(empty($k['activo'])) continue;

    $score=0;

    $preg=strtolower(trim($k['pregunta']??''));
    $keys=strtolower(trim($k['palabras_clave']??''));

    if($preg!=='' && $q===$preg) $score=100;

    if($preg!=='' && str_contains($q,$preg)) $score=max($score,90);

    if($keys!==''){
      $words=preg_split('/[\s,;]+/', $keys,-1,PREG_SPLIT_NO_EMPTY);
      $hits=0;

      foreach($words as $w){
        $w=trim($w);
        if($w!=='' && str_contains($q,$w)) $hits++;
      }

      if($hits>0){
        $score=max($score,40+($hits*15));
      }
    }

    if($score>$bestScore){
      $bestScore=$score;
      $best=$k;
    }
  }

  return $bestScore>=40 ? $best : null;
}

function buscarProd($q,$inv){
  $q=strtolower(trim($q));
  $q = preg_replace('/\b(quiero|quieroi|otro|comprar|necesito|busco|un|unos|una|el|la|los|las|de|con|cambiar|mejor)\b/',' ', $q);
  $q = trim(preg_replace('/\s+/', ' ', $q));
  if(strlen($q)<2) return null;
  $best=null; $bestScore=0;
  foreach($inv as $p){
    $n=strtolower($p['nombre']); $score=0;
    if(str_contains($n,$q) || str_contains($q,$n)) $score=100;
    $qWords=preg_split('/\s+/', $q); $nWords=preg_split('/\s+/', $n);
    foreach($nWords as $nw){ if(strlen($nw)<3) continue; foreach($qWords as $qw){ if(strlen($qw)<3) continue; if($nw==$qw) $score+=40; elseif(str_contains($nw,$qw)||str_contains($qw,$nw)) $score+=25; else { $lev=levenshtein($nw,$qw); if($lev<=1) $score+=30; elseif($lev<=2) $score+=20; elseif($lev<=3) $score+=12; similar_text($nw,$qw,$perc); if($perc>75) $score+=15; } } }
    if(str_contains($q,'conec') && str_contains($n,'conec')) $score+=60;
    if(str_contains($q,'ventila') && str_contains($n,'ventila')) $score+=60;
    if(str_contains($q,'gravi') && str_contains($n,'gravi')) $score+=60;
    if(str_contains($q,'archer') && str_contains($n,'archer')) $score+=60;
    if(str_contains($q,'router') && str_contains($n,'router')) $score+=40;
    if($score>$bestScore){ $bestScore=$score; $best=$p; }
  }
  return $bestScore>=20? $best : null;
}

// NUEVO: lectura unificada BIDIRECCIONAL
function leerPedidosUnificados(){
  $file1='/var/www/0000/database/pedidos_estrella.json';
  $file2='/var/www/0000/database/pedidos_horizon.json';
  $a1=json_decode(@file_get_contents($file1),true)?:[];
  $a2=json_decode(@file_get_contents($file2),true)?:[];
  $map=[];
  foreach(array_merge($a1,$a2) as $p){ $map[$p['id']]=$p; }
  $all=array_values($map);
  usort($all,function($a,$b){
    $ta=strtotime($a['fecha_creado']??$a['fecha']??'now');
    $tb=strtotime($b['fecha_creado']??$b['fecha']??'now');
    return $tb <=> $ta;
  });
  return $all;
}

function saveSimulacro($hz,$cliente_id){
  $file='/var/www/0000/database/pedidos_estrella.json';
  $file2='/var/www/0000/database/pedidos_horizon.json';
  $all=json_decode(@file_get_contents($file),true)?:[];
  $id='HZ_'.time().'_'.rand(100,999);
  $nuevo=['id'=>$id,'fecha'=>date('d-m-Y H:i'),'estado'=>'PENDIENTE','producto'=>$hz['prod']['nombre'],'cantidad'=>$hz['cant'],'total'=>$hz['prod']['precio']*$hz['cant'],'cliente'=>$hz['datos'],'cliente_id'=>$cliente_id,'origen'=>'ESTRELLA','fecha_creado'=>date('Y-m-d H:i:s')];
  $all[]=$nuevo;
  file_put_contents($file,json_encode($all,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE));
  $all2=json_decode(@file_get_contents($file2),true)?:[];
  $all2[]=$nuevo;
  file_put_contents($file2,json_encode($all2,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE));
  return $id;
}

function listaBonita($inv){
  $n = array_column($inv,'nombre');
  if(!$n) return ' sin stock';
  $h = "<br><div style='margin:8px 0;padding:10px;background:#111;border:1px solid #333;border-radius:10px;line-height:1.9'>";
  foreach($n as $x){ $h.= "• <b>".htmlspecialchars($x)."</b><br>"; }
  $h.= "</div>";
  return $h;
}

function ultimoPedido($cliente_id){
  $all=leerPedidosUnificados();
  foreach($all as $p){ if(($p['cliente_id']??'')==$cliente_id) return $p; }
  return null;
}

function estadoBonito($est){
  $est=strtoupper(trim($est));
  if($est=='PENDIENTE') return "📋 <b>PENDIENTE DE REVISIÓN</b> - ya lo estamos viendo en el expendedor";
  if($est=='PREPARADO') return "📦 <b>PREPARADO</b> - ya está listo, esperando mensajero";
  if($est=='EN_RUTA' || $est=='EN_CAMINO' || $est=='ENVIADO') return "🚚 <b>EN CAMINO</b> - ya salió para tu dirección";
  if($est=='COBRADO' || $est=='VENDIDO' || $est=='ENTREGADO') return "✅ <b>ENTREGADO Y COBRADO</b> - gracias por tu compra!";
  if($est=='CANCELADO') return "❌ <b>CANCELADO</b>";
  return "Estado: <b>$est</b>";
}

$hint = "<br><br><small style='color:#ff6600'>💡 Si ya pediste, escribe <b>mi pedido</b> para ver donde está.</small>";

if(preg_match('/\b(otro|nuevo|reiniciar|comprar otro|quiero otro)\b/', $q)){
  $_SESSION['hz']=['step'=>0,'prod'=>null,'cant'=>0,'datos'=>[]];
  echo json_encode(['reply'=>'¡Dale! 👁️ Vamos con el siguiente. ¿Qué buscas ahora? Tengo: '.listaBonita($inv).$hint]); exit;
}

// CONSULTA DE ESTADO - AHORA BIDIRECCIONAL
if(str_contains($q,'mi pedido')||str_contains($q,'donde esta')||str_contains($q,'estado')||str_contains($q,'seguimiento')||str_contains($q,'donde va')||str_contains($q,'mi orden')){
  $ult=ultimoPedido($cliente_id);
  if($ult){
    $est=$ult['estado'];
    $msj="👁️ Tu último pedido <b>".$ult['id']."</b>: ".$ult['cantidad' ]."x ".$ult['producto']." = $".$ult['total']."<br><br>";
    $msj.= estadoBonito($est);
    $msj.="<br><br>👤 ".htmlspecialchars($ult['cliente']['nombre']??'')." | 📍 ".htmlspecialchars($ult['cliente']['direccion']??'')." | 📱 ".htmlspecialchars($ult['cliente']['movil']??'');
    if($est=='PENDIENTE') $msj.="<br><br>⏳ El expendedor aún no lo prepara. Te aviso en cuanto cambie.";
    elseif($est=='PREPARADO') $msj.="<br><br>🎉 Ya está preparado! Sale en breve.";
    elseif(in_array($est,['EN_RUTA','EN_CAMINO','ENVIADO'])) $msj.="<br><br>🛵 Ya va en camino, atento al móvil!";
    echo json_encode(['reply'=>$msj.$hint,'estado'=>$est,'pedido'=>$ult]); exit;
  } else {
    $all=leerPedidosUnificados();
    $c=count($all);
    echo json_encode(['reply'=>'Aún no veo pedidos con tu ID ('.$cliente_id.') 👁️ Tengo '.$c.' pedidos totales. ¿Qué buscas?'.$hint]); exit;
  }
}

if(str_contains($q,'cancelar')||$q=='nuevo'||$q=='empezar de nuevo'){ $_SESSION['hz']=['step'=>0,'prod'=>null,'cant'=>0,'datos'=>[]]; echo json_encode(['reply'=>'Ok, empezamos de nuevo 👁️ ¿Qué producto buscas?'.$hint]); exit; }

if($hz['step']==0){
  $conocimiento=buscarConocimiento($q);
  if($conocimiento){
    $respuesta=$conocimiento['respuesta']??'';
    $respuesta=str_replace('{total_productos}',count($inv),$respuesta);
    echo json_encode(['reply'=>$respuesta]);
    exit;
  }


  $saludos=['hola','buenas','buenos','hey','ola','saludos','q tal','que tal'];
  foreach($saludos as $s){ if(str_contains($q,$s) && strlen($q)<20){ echo json_encode(['reply'=>'¡Buenas! ☀️ Soy ESTRELLA 👁️, veo '.count($inv).' productos con stock real. ¿Qué te interesa hoy?'.$hint]); exit; } }
  $p=buscarProd($q,$inv);
  if($p){ $hz['prod']=$p; $hz['step']=1; echo json_encode(['reply'=>"¡Sí lo veo! 👁️ ".$p['nombre']. " a $".($p['precio']>=1000?$p['precio']:$p['precio'])." - Me quedan ".$p['real']." en stock. ¿Cuántos quieres?"]); exit; }
  else { echo json_encode(['reply'=>"Eso no lo veo ahora 👁️. Tengo: ".listaBonita($inv)."<br>¿Cuál te interesa?".$hint]); exit; }
}
// Detecta preguntas para no guardar accidentalmente una consulta como dato del pedido.
function parecePregunta($msg){
  $t=trim(mb_strtolower($msg,'UTF-8'));

  if($t==='') return false;

  // Signos de interrogación: la señal más fiable.
  if(str_contains($t,'?') || str_contains($t,'¿')) return true;

  // Preguntas habituales aunque el cliente no use signos.
  return (bool)preg_match(
    '/^(que|qué|como|cómo|cuando|cuándo|donde|dónde|cual|cuál|cuanto|cuánto|cuantos|cuántos|tienen|tiene|hay|pueden|puede|se puede|es posible|dime|sabes|sabe)\b/u',
    $t
  );
}

// INTERRUPCIONES DURANTE UNA COMPRA
// Si el cliente hace una consulta conocida, responder sin perder el estado del pedido.
if($hz['step']>0 && parecePregunta($msg)){
  $conocimiento=buscarConocimiento($q);
  if($conocimiento){
    $respuesta=$conocimiento['respuesta']??'';
    $respuesta=str_replace('{total_productos}',count($inv),$respuesta);
    echo json_encode(['reply'=>$respuesta]);
    exit;
  }
}

if($hz['step']==1){
  $p2=buscarProd($q,$inv);
  if($p2 && strtolower($p2['nombre'])!= strtolower($hz['prod']['nombre'])){
    $hz['prod']=$p2;
    echo json_encode(['reply'=>"¡Cambio! 👁️ Ahora ".$p2['nombre']." a $ ".($p2['precio'])." - Me quedan ".$p2['real']." en stock. ¿Cuántos quieres de este?"]); exit;
  }
  preg_match('/\d+/',$q,$m); $cant=intval($m[0]??0); if($cant==0 && str_contains($q,'uno')) $cant=1;
  if($cant<=0){ echo json_encode(['reply'=>'¿Cuántos? Dime un número, ej: 1 o 2. Si quieres otro producto, escribe su nombre 👁️']); exit; }
  if($cant > $hz['prod']['real']){ echo json_encode(['reply'=>"Solo me quedan ".$hz['prod']['real']." 👁️ ¿Te los dejo todos?"]); exit; }
  $hz['cant']=$cant; $hz['step']=2;
  echo json_encode(['reply'=>"Perfecto, te reservo $cant x ".$hz['prod']['nombre'].". ¿A nombre de quién lo pongo?"]); exit;
}
if($hz['step']==2){ $hz['datos']['nombre']=$msg; $hz['step']=3; echo json_encode(['reply'=>"Gracias ".$msg." 👁️ ¿Cuál es la dirección de entrega?"]); exit; }
if($hz['step']==3){ $hz['datos']['direccion']=$msg; $hz['step']=4; echo json_encode(['reply'=>"Anotado. ¿Número de móvil para localizarte?"]); exit; }
if($hz['step']==4){ $hz['datos']['movil']=$msg; $hz['step']=5; echo json_encode(['reply'=>"¿A qué hora te viene bien la entrega?"]); exit; }
if($hz['step']==5){ $hz['datos']['hora_entrega']=$msg; $hz['step']=6; echo json_encode(['reply'=>"Último paso 👁️ Si no estás tú, ¿por quién pregunto?"]); exit; }
if($hz['step']==6){
  $hz['datos']['contacto_alt']=$msg;
  $total=$hz['prod']['precio']*$hz['cant'];
  $resumen="Te confirmo 👁️: ".$hz['cant']."x ".$hz['prod']['nombre']." = $$total<br>A nombre de ".$hz['datos']['nombre']." en ".$hz['datos']['direccion']."<br>¿Todo correcto? (Responde sí para confirmar o no para cancelar)";
  $hz['step']=7;
  echo json_encode(['reply'=>$resumen]); exit;
}
if($hz['step']==7){
  if(str_contains($q,'si')||str_contains($q,'sí')||str_contains($q,'correcto')||str_contains($q,'dale')){
    $id=saveSimulacro($hz,$cliente_id);
    $_SESSION['hz']=['step'=>0,'prod'=>null,'cant'=>0,'datos'=>[]];
    echo json_encode(['reply'=>"¡Pedido CONFIRMADO! 👁️ ID: $id<br>Ya está en el expendedor como PENDIENTE.<br><br>📌 <b>Guarda esto:</b> si reinicias el chat, escribe <b>mi pedido</b> y te digo donde va.<br>Puedes preguntarme 'estado de mi pedido' en cualquier momento. ¡Gracias!",'pedido_id'=>$id]); exit;
  } else {
    $_SESSION['hz']=['step'=>0,'prod'=>null,'cant'=>0,'datos'=>[]];
    echo json_encode(['reply'=>"Ok, lo cancelamos 👁️ No se envió al expendedor. ¿Qué buscas?".$hint ]); exit;
  }
}
