<?php

require_once '../../core/config.php';
require_once '../../core/session.php';
require_once '../../core/permissions.php'; // 1. Agregado el motor de permisos
require_once '../../core/database.php';    // 2. Necesario para las consultas de CRM
require_once '../../services/facto/FactoDocumentsSyncService.php';
// require_once '../../services/facto/FactoCustomersSyncService.php'; // <-- Desactivado
require_once '../../services/analytics/AnalyticsEngine.php';
require_once '../../services/crm/CrmService.php'; // 3. Traemos el motor comercial
require_once '../../core/notifications.php';

require_login();
require_permission('module.admin'); // 4. Bloqueo de seguridad

header('Content-Type: application/json; charset=utf-8');

// Desactivar el límite de tiempo de PHP por si hay muchos clientes
set_time_limit(300);

try {
    $pdo = db();
    $fromDate = date('Y-m-d', strtotime('-30 days'));
    $toDate = date('Y-m-d');
    $perPage = 100;

    // 1. Sincronización de Clientes DESACTIVADA a petición
    // $customerSync = new FactoCustomersSyncService();
    // $newCustomers = $customerSync->syncCustomers($perPage);

    // 2. Sincronización de Documentos (Mantenida)
    $documentSync = new FactoDocumentsSyncService();
    $documents = $documentSync->syncIssuedDocuments($fromDate, $toDate, $perPage);

    // 3. Reconstrucción de Analíticas (Mantenida)
    $engine = new AnalyticsEngine();
    $engine->rebuild();

    // ==========================================================================
    // 🚀 MOTOR PREDICTIVO B2B: Escaneo masivo de reposición tras la sincronización
    // ==========================================================================
    $crm = new CrmService();
    $oportunidadesCreadas = 0;

    // Traer todos los clientes que tengan un RUT válido para consultar su historial
    $stmtClientes = $pdo->query("SELECT id, customer_tax_id, customer_name FROM crm_customers WHERE customer_tax_id IS NOT NULL AND customer_tax_id != ''");
    $clientes = $stmtClientes->fetchAll();

    foreach ($clientes as $c) {
        // A. Actualiza la fecha ideal de reposición en la ficha del cliente
        $restockData = $crm->updateCustomerRestockFrequency($c['id'], $c['customer_tax_id']);

        if ($restockData && !empty($restockData['next_restock_date'])) {
            $nextDate = $restockData['next_restock_date'];
            $mesProximo = date('m/Y', strtotime($nextDate));
            $tituloFuturo = "Reposición Programada - " . $mesProximo;

            // B. Lógica Anti-Duplicación: Verificamos si esta oportunidad ya existe
            $stmtCheck = $pdo->prepare("SELECT id FROM crm_opportunities WHERE customer_id = ? AND title = ? LIMIT 1");
            $stmtCheck->execute([$c['id'], $tituloFuturo]);

            // C. Si no existe, creamos el "deal" en el embudo para el vendedor
            if (!$stmtCheck->fetchColumn()) {
                $stmtAuto = $pdo->prepare("
                    INSERT INTO crm_opportunities
                    (customer_id, title, customer_name, customer_tax_id, stage, expected_value, probability, owner_name, expected_close_date)
                    VALUES (?, ?, ?, ?, 'nuevo', 0, 50, 'Sistema', ?)
                ");
                
                $stmtAuto->execute([
                    $c['id'],
                    $tituloFuturo,
                    $c['customer_name'],
                    $c['customer_tax_id'],
                    $nextDate
                ]);
                
                $oportunidadesCreadas++;
            }
        }
    }
    // ==========================================================================

    echo json_encode(array(
        'success' => true,
        'message' => 'Sincronización completada.',
        'new_customers' => 0, // Ajustado a 0 ya que se desactivó
        'documents' => $documents,
        'restock_opportunities_created' => $oportunidadesCreadas, // Agregamos esto al log
        'from' => $fromDate,
        'to' => $toDate
    ));

} catch (Exception $e) {
    http_response_code(500);

    notify_admins_event('system.sync_error', array(
        'title' => 'Error en sincronización Facto',
        'body' => 'El proceso manual de sincronización falló.' . "\nDetalle: " . $e->getMessage(),
        'url' => '/modules/dashboard/',
        'module' => 'system',
        'related_type' => 'sync',
        'related_id' => null,
        'priority' => 'critical',
        'critical' => true,
        'force_email' => true,
        'actor_user_id' => notification_actor_user_id(),
        'dedupe_key' => 'system.sync_error:facto:' . date('YmdHi') . ':' . substr(md5($e->getMessage()), 0, 12)
    ));

    echo json_encode(array(
        'success' => false,
        'message' => $e->getMessage()
    ));
}