<?php
// htdocs/appquadrata/home/clientes/view/ajax/check_rfc.php

header('Content-Type: application/json; charset=UTF-8');
ob_start();
error_reporting(E_ALL);
ini_set('display_errors', 0);

// Manejadores de error para devolver siempre JSON
set_error_handler(function($errno, $errstr, $errfile, $errline){
  if (ob_get_length()) ob_clean();
  echo json_encode(['ok'=>false,'error'=>"PHP-$errno: $errstr @ $errfile:$errline",'exists'=>false]);
  exit;
});
set_exception_handler(function($e){
  if (ob_get_length()) ob_clean();
  echo json_encode(['ok'=>false,'error'=>$e->getMessage(),'exists'=>false]);
  exit;
});

// ---------- Localizar config.php sin importar niveles ----------
function find_config_above($startDir, $relativeTarget = 'odbconexion/config.php', $maxUp = 8) {
  $dir = $startDir;
  for ($i=0; $i < $maxUp; $i++) {
    $candidate = $dir . DIRECTORY_SEPARATOR . $relativeTarget;
    if (file_exists($candidate)) return $candidate;
    $parent = dirname($dir);
    if ($parent === $dir) break;
    $dir = $parent;
  }
  return false;
}

$configPath = find_config_above(__DIR__, 'odbconexion/config.php', 10);
if (!$configPath) {
  echo json_encode(['ok'=>false,'error'=>'No se encontró odbconexion/config.php','exists'=>false]);
  exit;
}
require_once $configPath;
// ---------------------------------------------------------------

// Obtener variables
$rfc        = isset($_POST['rfc']) ? strtoupper(trim($_POST['rfc'])) : '';
$exclude_id = isset($_POST['exclude_id']) ? (int)$_POST['exclude_id'] : 0;

if ($rfc === '') {
  echo json_encode(['ok'=>false,'error'=>'RFC vacío','exists'=>false]); 
  exit;
}

// Conexión a base de datos
$db = new odbconexion();
$conn = $db->openconection();
if (!$conn || $conn->connect_errno) {
  echo json_encode(['ok'=>false,'error'=>'Error de conexión','exists'=>false]); 
  exit;
}
$conn->set_charset('utf8mb4');

// Consulta
$sql = "SELECT Id_Clientes, Razon_Social_Persona_Moral, Nombre_Completo, Apellido_Paterno, Apellido_Materno, RFC
        FROM clientes
        WHERE RFC = ? " . ($exclude_id > 0 ? "AND Id_Clientes <> ?" : "");

$stmt = $conn->prepare($sql);
if (!$stmt) throw new Exception('Error en prepare: '.$conn->error);
if ($exclude_id > 0) $stmt->bind_param('si', $rfc, $exclude_id);
else $stmt->bind_param('s', $rfc);

$stmt->execute();
$res = $stmt->get_result();

// --- Reglas de negocio para mostrar a quién pertenece ---
function ownerFromRow(array $row): string {
  if (!empty($row['Razon_Social_Persona_Moral'])) {
    return trim($row['Razon_Social_Persona_Moral']);
  }
  $nombre  = trim($row['Nombre_Completo'] ?? '');
  $apPat   = trim($row['Apellido_Paterno'] ?? '');
  $apMat   = trim($row['Apellido_Materno'] ?? '');
  $rfc     = strtoupper(trim($row['RFC'] ?? ''));

  $nombrePuntos = rtrim(implode('.', array_filter([$nombre, $apPat, $apMat])), '.');
  return trim($nombrePuntos . ' - ' . $rfc, ' -');
}
// ---------------------------------------------------------

if ($res && $row = $res->fetch_assoc()) {
  $owner = ownerFromRow($row);
  $out = ['ok'=>true,'exists'=>true,'id'=>(int)$row['Id_Clientes'],'owner'=>$owner];
} else {
  $out = ['ok'=>true,'exists'=>false];
}

$stmt->close();
$conn->close();

if (ob_get_length()) ob_clean();
echo json_encode($out);
