<?php
/**
 * Siembra un set de DATOS DE PRUEBA para probar el CRM completo:
 * franquicias (provisionadas de verdad en Control Empresas dev), autorizaciones
 * de venta por marca y por producto, usuarios con colas de asignación, catálogo
 * manual, empresas cliente y leads en varios estados del embudo.
 *
 * Uso:      php sembrar_datos_prueba.php
 * Limpieza: php limpiar_datos_prueba.php --aplicar
 * Credenciales sembradas: password "demo1234" (se listan al final).
 */
$rootDir = dirname(dirname(__FILE__));
require $rootDir . '/config/constants.php';
$env = include $rootDir . '/.env.php';
$m = new mysqli('127.0.0.1', $env['DB_USER'], $env['DB_PASS'], 'asisma_crm');
if ($m->connect_error) die("conexión: " . $m->connect_error . "\n");
$m->set_charset('utf8mb4');

function dvDe($num) {
    $suma = 0; $factor = 2;
    for ($i = strlen($num) - 1; $i >= 0; $i--) { $suma += (int)$num[$i] * $factor; $factor = $factor == 7 ? 2 : $factor + 1; }
    $resto = 11 - ($suma % 11);
    return $resto == 11 ? '0' : ($resto == 10 ? 'K' : (string)$resto);
}
function rutValido($base) { return $base . '-' . dvDe($base); }

$cookies = tempnam(sys_get_temp_dir(), 'cks');
function pedir($ruta, $post = null) {
    global $cookies;
    $ch = curl_init('http://127.0.0.1' . $ruta);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: asismacrm.duckdns.org', 'X-Requested-With: XMLHttpRequest'));
    curl_setopt($ch, CURLOPT_COOKIEJAR, $cookies);
    curl_setopt($ch, CURLOPT_COOKIEFILE, $cookies);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 120);
    if ($post !== null) { curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); }
    $c = curl_exec($ch);
    curl_close($ch);
    return json_decode($c, true);
}
function insertar($m, $sql, $etq) { if (!$m->query($sql)) die("ERR $etq: " . $m->error . "\n"); return $m->insert_id; }
function paso($txt) { echo "• $txt\n"; }

echo "══ SEMBRANDO DATOS DE PRUEBA ══\n\n";

// ── 0. Login admin ──
$r = pedir('/authenticate', array('email' => 'admin@asisma.cl', 'password' => 'Asisma#2026'));
$chequeo = pedir('/leads/buscar-rut?rut=1-9'); // cualquier llamada autenticada
if (!$chequeo || !isset($chequeo['success'])) die("No se pudo iniciar sesión admin (¿cambió la contraseña?)\n");
paso('Sesión admin iniciada');

// ── 1. Franquicias demo (flujo real: se provisionan en Control Empresas dev) ──
$franquicias = array(
    array('razon' => 'Franquicia Santiago Centro SpA', 'fantasia' => 'DEMO Santiago Centro', 'rut' => rutValido('76200001'), 'region' => 7,  'vertical' => 15, 'prioridad' => 10, 'email' => 'centro@demo.cl',  'dir' => 'Ahumada 100, Santiago'),
    array('razon' => 'Franquicia Santiago Norte SpA',  'fantasia' => 'DEMO Santiago Norte',  'rut' => rutValido('76200002'), 'region' => 7,  'vertical' => 15, 'prioridad' => 5,  'email' => 'norte@demo.cl',   'dir' => 'Av. Independencia 2500, Santiago'),
    array('razon' => 'Franquicia Automotriz RM SpA',   'fantasia' => 'DEMO Automotriz RM',   'rut' => rutValido('76200003'), 'region' => 7,  'vertical' => 18, 'prioridad' => 0,  'email' => 'autos@demo.cl',   'dir' => 'Av. Las Condes 12000, Santiago')
);
$idsFranq = array();
foreach ($franquicias as $fq) {
    $ya = $m->query("SELECT f.id FROM franquiciados f JOIN empresas_franquiciados ef ON ef.id = f.empresa_madre_id WHERE ef.rut = '" . $m->real_escape_string($fq['rut']) . "'")->fetch_assoc();
    if ($ya) { $idsFranq[$fq['fantasia']] = (int)$ya['id']; paso("{$fq['fantasia']} ya existía (franq {$ya['id']})"); continue; }
    $r = pedir('/franquiciados/crear', array(
        'razon_social' => $fq['razon'], 'nombre_fantasia' => $fq['fantasia'], 'rut' => $fq['rut'],
        'email' => $fq['email'], 'telefono' => '+56221234567', 'direccion' => $fq['dir'],
        'region_id' => $fq['region'], 'vertical_id' => $fq['vertical'],
        'tiempo_toma_lead' => 300, 'prioridad' => $fq['prioridad'], 'max_leads_activos' => 0, 'estado' => 'activo'
    ));
    if (!$r || !$r['success']) die("ERR creando {$fq['fantasia']}: " . ($r ? $r['message'] : 'sin respuesta') . "\n");
    $fila = $m->query("SELECT f.id FROM franquiciados f JOIN empresas_franquiciados ef ON ef.id = f.empresa_madre_id WHERE ef.rut = '" . $m->real_escape_string($fq['rut']) . "'")->fetch_assoc();
    $idsFranq[$fq['fantasia']] = (int)$fila['id'];
    paso("{$fq['fantasia']} creada (franq {$fila['id']}) y provisionada en CE");
}
$fCentro = $idsFranq['DEMO Santiago Centro'];
$fNorte  = $idsFranq['DEMO Santiago Norte'];
$fAutos  = $idsFranq['DEMO Automotriz RM'];
$fBiobio = 11; // franquiciado existente (Biobío, SAAS)

// ── 2. Catálogo manual: marca + producto propios del CRM (sin CE) ──
$marcaManual = $m->query("SELECT id FROM marcas WHERE nombre = 'SERVICIOS PROPIOS'")->fetch_assoc();
if (!$marcaManual) {
    $r = pedir('/marcas/crear', array('vertical_id' => 15, 'nombre' => 'SERVICIOS PROPIOS'));
    if (!$r || !$r['success']) die("ERR marca manual: " . ($r ? $r['message'] : '-') . "\n");
    $marcaManualId = (int)$r['id'];
} else { $marcaManualId = (int)$marcaManual['id']; }
$prodManual = $m->query("SELECT id FROM productos WHERE nombre = 'CONSULTORIA DE IMPLEMENTACION'")->fetch_assoc();
if (!$prodManual) {
    $r = pedir('/productos/crear', array('vertical_id' => 15, 'marca_id' => $marcaManualId, 'nombre' => 'CONSULTORIA DE IMPLEMENTACION', 'descripcion' => 'Servicio manual creado en el CRM (no viene de CE)', 'precio_minimo' => 200000, 'precio_sugerido' => 250000));
    if (!$r || !$r['success']) die("ERR producto manual: " . ($r ? $r['message'] : '-') . "\n");
    $prodManualId = (int)$r['id'];
} else { $prodManualId = (int)$prodManual['id']; }
paso("Catálogo manual: marca SERVICIOS PROPIOS ($marcaManualId) + producto CONSULTORIA DE IMPLEMENTACION ($prodManualId)");

// ── 3. Autorizaciones de venta (flujo real del modal 🏷) ──
// Productos del catálogo CE: marca 14 ASISMA (72, 73) / marca 26 Ford (81)
$r = pedir('/franquiciados/marcas/guardar', array('id' => $fCentro, 'marcas' => array(14), 'productos' => array($prodManualId)));
paso("Santiago Centro: marca ASISMA completa + producto manual suelto -> " . $r['message']);
$r = pedir('/franquiciados/marcas/guardar', array('id' => $fNorte, 'productos' => array(72)));
paso("Santiago Norte: SOLO producto 72 suelto -> " . $r['message']);
$r = pedir('/franquiciados/marcas/guardar', array('id' => $fAutos, 'marcas' => array(26)));
paso("Automotriz RM: marca Ford completa -> " . $r['message']);
$r = pedir('/franquiciados/marcas/guardar', array('id' => $fBiobio, 'marcas' => array(14)));
paso("Franquiciado Biobío (11): marca ASISMA completa -> " . $r['message']);

// ── 4. Usuarios y colas de asignación ──
$hash = $m->real_escape_string(password_hash('demo1234', PASSWORD_BCRYPT));
$usuarios = array(
    // franquicia => [ef_id se busca], rol, nombre, email
    array($fCentro, 'franquiciado', 'Carolina Núñez (Dueña Centro)', 'demo.centro@asisma.cl'),
    array($fCentro, 'vendedor',     'Pedro Salas (Vendedor Centro 1)', 'vendedor1.centro@asisma.cl'),
    array($fCentro, 'vendedor',     'María Rojas (Vendedora Centro 2)', 'vendedor2.centro@asisma.cl'),
    array($fNorte,  'franquiciado', 'Jorge Fuentes (Dueño Norte)', 'demo.norte@asisma.cl'),
    array($fNorte,  'vendedor',     'Ana Torres (Vendedora Norte 1)', 'vendedor1.norte@asisma.cl'),
    array($fAutos,  'franquiciado', 'Rodrigo Vega (Dueño Automotriz)', 'demo.autos@asisma.cl'),
    array($fAutos,  'vendedor',     'Camila Soto (Vendedora Autos 1)', 'vendedor1.autos@asisma.cl'),
    array($fBiobio, 'franquiciado', 'Luis Paredes (Dueño Biobío)', 'demo.biobio@asisma.cl'),
    array($fBiobio, 'vendedor',     'Sofía Muñoz (Vendedora Biobío 1)', 'vendedor1.biobio@asisma.cl'),
);
$idUsuario = array();
foreach ($usuarios as $u) {
    list($fid, $rol, $nombre, $email) = $u;
    $ef = $m->query("SELECT empresa_madre_id FROM franquiciados WHERE id = $fid")->fetch_assoc();
    $efId = (int)$ef['empresa_madre_id'];
    $ya = $m->query("SELECT id FROM usuarios WHERE email = '" . $m->real_escape_string($email) . "'")->fetch_assoc();
    if ($ya) { $idUsuario[$email] = (int)$ya['id']; continue; }
    $idUsuario[$email] = insertar($m, "INSERT INTO usuarios (empresa_id, franquiciado_id, rol, nombre, email, password_hash, activo)
        VALUES ($efId, $fid, '$rol', '" . $m->real_escape_string($nombre) . "', '" . $m->real_escape_string($email) . "', '$hash', 1)", "usuario $email");
    if ($rol === 'vendedor') {
        $orden = (int)$m->query("SELECT IFNULL(MAX(orden),0)+1 o FROM cola_asignacion WHERE franquiciado_id = $fid")->fetch_assoc()['o'];
        insertar($m, "INSERT INTO cola_asignacion (franquiciado_id, usuario_id, orden, activo) VALUES ($fid, {$idUsuario[$email]}, $orden, 1)", "cola $email");
    }
}
paso(count($usuarios) . ' usuarios creados con sus colas de asignación (password demo1234)');

// ── 5. Empresas cliente + contactos + leads en varios estados ──
function crearEmpresaConLead($m, $def) {
    $rut = $m->real_escape_string($def['rut']);
    $ya = $m->query("SELECT id FROM empresas WHERE rut = '$rut'")->fetch_assoc();
    if ($ya) return; // idempotente
    $eid = insertar($m, "INSERT INTO empresas (rut, razon_social, nombre_fantasia, giro, region_id, telefono, email, activa)
        VALUES ('$rut', '" . $m->real_escape_string($def['razon']) . "', '" . $m->real_escape_string($def['fantasia']) . "',
                '" . $m->real_escape_string($def['giro']) . "', {$def['region']}, '{$def['telefono']}', '" . $m->real_escape_string($def['correo']) . "', 1)", "empresa {$def['fantasia']}");
    $cid = insertar($m, "INSERT INTO contactos (empresa_id, nombre, correo, telefono, cargo, es_principal)
        VALUES ($eid, '" . $m->real_escape_string($def['contacto']) . "', '" . $m->real_escape_string($def['correo']) . "', '{$def['telefono']}', '" . $m->real_escape_string($def['cargo']) . "', 1)", "contacto {$def['fantasia']}");
    if (!isset($def['lead'])) return;
    $L = $def['lead'];
    $franq = $L['franquiciado'] ? $L['franquiciado'] : 'NULL';
    $usr   = $L['usuario'] ? $L['usuario'] : 'NULL';
    $marca = $L['marca'] ? $L['marca'] : 'NULL';
    $prod  = $L['producto'] ? $L['producto'] : 'NULL';
    $leadId = insertar($m, "INSERT INTO leads (empresa_id, contacto_id, franquiciado_id, usuario_asignado_id, origen, region_id,
            vertical_interes, marca_interes, producto_interes, estado_embudo, telefono_real, telefono_enmascarado,
            correo_real, correo_enmascarado, datos_liberados)
        VALUES ($eid, $cid, $franq, $usr, '{$L['origen']}', {$def['region']}, {$L['vertical']}, $marca, $prod,
                '{$L['estado']}', '{$def['telefono']}', '" . enmascarar_telefono($def['telefono']) . "',
                '" . $m->real_escape_string($def['correo']) . "', '" . enmascarar_correo($def['correo']) . "', " . ($L['franquiciado'] ? 1 : 0) . ")", "lead {$def['fantasia']}");
    insertar($m, "INSERT INTO actividades_crm (lead_id, usuario_id, tipo, direccion, asunto, detalles)
        VALUES ($leadId, NULL, 'sistema', 'interna', 'Lead creado', 'Lead de prueba sembrado para la demo.')", 'actividad');
    if (!empty($L['nota'])) {
        insertar($m, "INSERT INTO actividades_crm (lead_id, usuario_id, tipo, direccion, asunto, detalles)
            VALUES ($leadId, $usr, 'nota', 'interna', 'Nota inicial', '" . $m->real_escape_string($L['nota']) . "')", 'nota');
    }
    if ($L['franquiciado'] && $L['usuario']) {
        insertar($m, "INSERT INTO asignaciones_lead (lead_id, franquiciado_id, usuario_id, estado, timeout_segundos)
            VALUES ($leadId, {$L['franquiciado']}, {$L['usuario']}, '" . ($L['estado'] === 'asignado' ? 'pendiente' : 'aceptado') . "', 300)", 'asignacion');
    }
}

$v1c = $idUsuario['vendedor1.centro@asisma.cl'];
$v2c = $idUsuario['vendedor2.centro@asisma.cl'];
$v1n = $idUsuario['vendedor1.norte@asisma.cl'];
$v1a = $idUsuario['vendedor1.autos@asisma.cl'];
$v1b = $idUsuario['vendedor1.biobio@asisma.cl'];

$empresas = array(
    array('rut' => rutValido('76300001'), 'razon' => 'Farmacia Cruz del Sur SpA', 'fantasia' => 'Farmacia Cruz del Sur', 'giro' => 'Venta de productos farmacéuticos', 'region' => 7, 'telefono' => '+56951000001', 'correo' => 'gerencia@cruzdelsur.cl', 'contacto' => 'Marcela Vidal', 'cargo' => 'Gerenta General',
        'lead' => array('franquiciado' => $fCentro, 'usuario' => $v1c, 'vertical' => 15, 'marca' => 14, 'producto' => 72, 'estado' => 'negociando', 'origen' => 'web', 'nota' => 'Cadena de 3 locales, quiere partir con uno. Sensible al precio.')),
    array('rut' => rutValido('76300002'), 'razon' => 'Clínica Dental Blanca Ltda', 'fantasia' => 'Clínica Dental Blanca', 'giro' => 'Servicios odontológicos', 'region' => 7, 'telefono' => '+56951000002', 'correo' => 'contacto@dentalblanca.cl', 'contacto' => 'Dr. Andrés Pinto', 'cargo' => 'Director',
        'lead' => array('franquiciado' => $fNorte, 'usuario' => $v1n, 'vertical' => 15, 'marca' => 14, 'producto' => 72, 'estado' => 'ganado', 'origen' => 'referido', 'nota' => 'Cliente cerrado: implementación en curso.')),
    array('rut' => rutValido('76300003'), 'razon' => 'Minimarket El Copihue EIRL', 'fantasia' => 'Minimarket El Copihue', 'giro' => 'Comercio minorista', 'region' => 11, 'telefono' => '+56951000003', 'correo' => 'elcopihue@correo.cl', 'contacto' => 'Rosa Millán', 'cargo' => 'Propietaria',
        'lead' => array('franquiciado' => $fBiobio, 'usuario' => $v1b, 'vertical' => 15, 'marca' => 14, 'producto' => 72, 'estado' => 'contactado', 'origen' => 'meta', 'nota' => 'Respondió por WhatsApp, pidió que la llamen en la tarde.')),
    array('rut' => rutValido('76300004'), 'razon' => 'Ferretería Los Andes SpA', 'fantasia' => 'Ferretería Los Andes', 'giro' => 'Venta de materiales de construcción', 'region' => 7, 'telefono' => '+56951000004', 'correo' => 'ventas@ferreterialosandes.cl', 'contacto' => 'Héctor Ramírez', 'cargo' => 'Administrador'),
    array('rut' => rutValido('76300005'), 'razon' => 'Automotora del Pacífico SpA', 'fantasia' => 'Automotora del Pacífico', 'giro' => 'Compraventa de vehículos', 'region' => 7, 'telefono' => '+56951000005', 'correo' => 'gerencia@autopacifico.cl', 'contacto' => 'Felipe Guzmán', 'cargo' => 'Gerente Comercial',
        'lead' => array('franquiciado' => $fAutos, 'usuario' => $v1a, 'vertical' => 18, 'marca' => 26, 'producto' => 81, 'estado' => 'cotizado', 'origen' => 'web', 'nota' => 'Interesado en la F-150 Raptor para flota ejecutiva.')),
    array('rut' => rutValido('76300006'), 'razon' => 'Panadería San José Ltda', 'fantasia' => 'Panadería San José', 'giro' => 'Elaboración de pan y pasteles', 'region' => 7, 'telefono' => '+56951000006', 'correo' => 'sanjose@panaderia.cl', 'contacto' => 'Manuel Ortega', 'cargo' => 'Dueño',
        'lead' => array('franquiciado' => null, 'usuario' => null, 'vertical' => 15, 'marca' => 14, 'producto' => 73, 'estado' => 'nuevo', 'origen' => 'api', 'nota' => 'Lead huérfano: llegó por API y espera asignación (cron de rotación).')),
    array('rut' => rutValido('76300007'), 'razon' => 'Hotel Mirador del Valle SpA', 'fantasia' => 'Hotel Mirador del Valle', 'giro' => 'Hotelería', 'region' => 6, 'telefono' => '+56951000007', 'correo' => 'reservas@miradordelvalle.cl', 'contacto' => 'Paulina Herrera', 'cargo' => 'Gerenta',
        'lead' => array('franquiciado' => $fCentro, 'usuario' => $v2c, 'vertical' => 15, 'marca' => 14, 'producto' => 72, 'estado' => 'perdido', 'origen' => 'web', 'nota' => 'Se fue con la competencia por presupuesto. Histórico perdido.')),
);
foreach ($empresas as $def) crearEmpresaConLead($m, $def);
paso(count($empresas) . ' empresas cliente con contactos y leads sembradas');

// ── Resumen ──
echo "\n══ RESUMEN DEL SET DE PRUEBA ══\n\n";
echo "FRANQUICIAS (todas provisionadas en CE dev):\n";
echo "  - DEMO Santiago Centro (franq $fCentro, RM, SAAS, prioridad 10): marca ASISMA COMPLETA + producto manual suelto\n";
echo "  - DEMO Santiago Norte  (franq $fNorte, RM, SAAS, prioridad 5): SOLO producto 72 suelto\n";
echo "  - DEMO Automotriz RM   (franq $fAutos, RM, Automotriz): marca Ford completa\n";
echo "  - Franquiciado Biobío  (franq 11, Biobío, SAAS): marca ASISMA completa\n\n";
echo "USUARIOS (password demo1234):\n";
foreach ($usuarios as $u) echo "  - {$u[3]}  ({$u[1]})\n";
echo "\nAPI KEYS de captación:\n";
$r = $m->query("SELECT ef.nombre_fantasia, ef.api_key_leads FROM empresas_franquiciados ef JOIN franquiciados f ON f.empresa_madre_id = ef.id WHERE f.id IN ($fCentro, $fNorte, $fAutos, $fBiobio)");
while ($x = $r->fetch_assoc()) echo "  - {$x['nombre_fantasia']}: {$x['api_key_leads']}\n";
echo "\nLEADS SEMBRADOS:\n";
echo "  - Farmacia Cruz del Sur (RM): NEGOCIANDO con Santiago Centro -> prueba el candado anti-duplicado y el networking\n";
echo "  - Clínica Dental Blanca (RM): GANADO por Santiago Norte -> networking 'ya es su cliente', permite reingreso\n";
echo "  - Minimarket El Copihue (Biobío): CONTACTADO por franq 11\n";
echo "  - Ferretería Los Andes (RM): empresa SIN leads -> prueba autocompletado limpio por RUT\n";
echo "  - Automotora del Pacífico (RM): COTIZADO por Automotriz RM (Ford)\n";
echo "  - Panadería San José (RM): NUEVO sin asignar (huérfano para el cron de rotación)\n";
echo "  - Hotel Mirador del Valle (Valparaíso): PERDIDO (histórico)\n\n";
echo "IDEAS DE PRUEBA:\n";
echo "  1. Entra como demo.norte@asisma.cl e intenta crear lead de Farmacia Cruz del Sur (" . rutValido('76300001') . ") -> candado + networking\n";
echo "  2. Como demo.centro@asisma.cl crea un lead: verás el selector de producto (marca completa + suelto)\n";
echo "  3. Como demo.norte@asisma.cl crea un lead: producto único automático (solo tiene el 72)\n";
echo "  4. POST a /api/leads con la api_key de Santiago Centro y producto 72 -> rota entre Centro (prioridad 10) y Norte\n";
echo "  5. Revisa Comercial -> API de Leads con cada cuenta (llave y ejemplos propios)\n";
echo "  6. Catálogo -> Productos como admin: verás CONSULTORIA DE IMPLEMENTACION editable y los CE bloqueados\n";
echo "\nListo. Limpieza: php database/limpiar_datos_prueba.php --aplicar\n";
