<?php
session_start();
require_once 'includes/db.php';
require_once 'includes/funciones_registro.php';

if (!isset($_POST['entregas']) || empty($_POST['entregas'])) {
    $_SESSION['mensaje'] = [
        'tipo' => 'warning',
        'texto' => 'No se seleccionaron entregas para registrar.'
    ];
    header('Location: caja.php');
    exit;
}

$db = new Database();
$pdo = $db->getPDO();

try {
    $pdo->beginTransaction();

    // Actualizar entregas como rendidas
    $entregas = $_POST['entregas'];
    $placeholders = str_repeat('?,', count($entregas) - 1) . '?';
    
    $stmt = $pdo->prepare("
        UPDATE entregas_pendientes 
        SET rendida = TRUE, 
            fecha_rendicion = NOW() 
        WHERE id IN ($placeholders) AND vendedor_id = ?
    ");
    
    $params = array_merge($entregas, [$_SESSION['usuario_id']]);
    $stmt->execute($params);

    // Actualizar ventas correspondientes
    $stmt = $pdo->prepare("
        UPDATE ventas v
        JOIN entregas_pendientes ep ON v.id = ep.venta_id
        SET v.entrega_rendida = TRUE
        WHERE ep.id IN ($placeholders)
    ");
    $stmt->execute($entregas);
    
    // Obtener detalles de las entregas para el registro
    $stmt_detalles = $pdo->prepare("
        SELECT ep.id, ep.venta_id, ep.monto, v.cliente_id, c.nombre as cliente_nombre, 
               c.apellidos, c.apellido
        FROM entregas_pendientes ep
        LEFT JOIN ventas v ON ep.venta_id = v.id
        LEFT JOIN clientes c ON v.cliente_id = c.id_cliente OR v.cliente_id = c.id OR v.cliente_id = c.cliente_id
        WHERE ep.id IN ($placeholders)
    ");
    $stmt_detalles->execute($entregas);
    $entregas_detalles = $stmt_detalles->fetchAll(PDO::FETCH_ASSOC);

    $pdo->commit();
    
    // Registrar la actividad de entrega en el historial
    if (!empty($entregas_detalles)) {
        // Obtener el símbolo de moneda
        $simbolo_moneda = '$';
        try {
            $stmt_config = $pdo->query("SELECT moneda FROM configuracion LIMIT 1");
            $config = $stmt_config->fetch(PDO::FETCH_ASSOC);
            if ($config && isset($config['moneda'])) {
                $simbolo_moneda = $config['moneda'];
            }
        } catch (Exception $e) {
            error_log("Error al obtener moneda de configuración: " . $e->getMessage());
        }
        
        // Calcular el monto total y preparar los detalles
        $total_monto = 0;
        $cliente_nombres = [];
        
        foreach ($entregas_detalles as $entrega) {
            $total_monto += floatval($entrega['monto']);
            
            $nombre_completo = '';
            if (!empty($entrega['cliente_nombre'])) {
                $apellido = $entrega['apellidos'] ?? $entrega['apellido'] ?? '';
                $nombre_completo = trim($entrega['cliente_nombre'] . ' ' . $apellido);
                
                if (!empty($nombre_completo) && !in_array($nombre_completo, $cliente_nombres)) {
                    $cliente_nombres[] = $nombre_completo;
                }
            }
        }
        
        // Formar el texto de clientes
        $clientes_texto = '';
        if (!empty($cliente_nombres)) {
            if (count($cliente_nombres) > 2) {
                $clientes_texto = implode(", ", array_slice($cliente_nombres, 0, 2)) . 
                                 " y " . (count($cliente_nombres) - 2) . " más";
            } else {
                $clientes_texto = implode(", ", $cliente_nombres);
            }
        }
        
        // Crear el detalle para el registro
        $detalles = "Registro de " . count($entregas) . " entregas rendidas por " . 
                   $simbolo_moneda . number_format($total_monto, 2);
        
        if (!empty($clientes_texto)) {
            $detalles .= " - Clientes: " . $clientes_texto;
        }
        
        // Registrar la actividad
        try {
            registrarActividadUsuario(
                $_SESSION['usuario_id'],
                'entrega_rendida',
                $detalles
            );
        } catch (Exception $e) {
            error_log("Error al registrar actividad de entregas: " . $e->getMessage());
        }
    }
    
    $_SESSION['mensaje'] = [
        'tipo' => 'success',
        'texto' => 'Entregas registradas correctamente.'
    ];
} catch (Exception $e) {
    $pdo->rollBack();
    $_SESSION['mensaje'] = [
        'tipo' => 'danger',
        'texto' => 'Error al registrar las entregas.'
    ];
    
    // Registrar el error en el historial
    try {
        registrarActividadUsuario(
            $_SESSION['usuario_id'],
            'error_entrega',
            'Error al registrar entregas: ' . $e->getMessage()
        );
    } catch (Exception $err) {
        error_log("Error al registrar actividad de error: " . $err->getMessage());
    }
}

header('Location: caja.php');
exit;
