<?php
// Exporta ventas importadas (filtradas) a un archivo compatible con Excel

session_start();

require_once __DIR__ . '/config/database.php';

// Helper para salida segura
function e($value) {
    return htmlspecialchars((string)$value, ENT_QUOTES, 'UTF-8');
}

try {
    // Validar sesión básica
    if (!isset($_SESSION['user']['codempleado'])) {
        http_response_code(401);
        echo 'No autorizado';
        exit;
    }

    $database = new Database();
    $conn = $database->getConnection();

    // Obtener codempresa del usuario logueado
    $codempresaUsuario = null;
    $stmtEmpresa = $conn->prepare("SELECT codempresa FROM templeado WHERE codempleado = ?");
    $stmtEmpresa->execute([$_SESSION['user']['codempleado']]);
    $resEmpresa = $stmtEmpresa->fetch(PDO::FETCH_ASSOC);
    if ($resEmpresa) {
        $codempresaUsuario = $resEmpresa['codempresa'];
    }

    // Filtros
    $search = isset($_GET['search']) ? trim($_GET['search']) : '';
    $tipo = isset($_GET['tipo']) ? trim($_GET['tipo']) : 'activos'; // 'activos' o 'liquidados'
    $esLiquidados = ($tipo === 'liquidados');

    // Construir consulta (sin paginación) con información de morosidad
    $query = "SELECT v.*, 
                     c.codcronogramaventas as primer_pendiente_id,
                     c.fechapago as primer_pendiente_fecha,
                     c.estado as primer_pendiente_estado,
                     CASE 
                         WHEN c.fechapago IS NOT NULL AND c.fechapago <= CURDATE() THEN DATEDIFF(CURDATE(), c.fechapago)
                         WHEN c.fechapago IS NOT NULL AND c.fechapago > CURDATE() THEN DATEDIFF(CURDATE(), c.fechapago)
                         ELSE NULL
                     END as dias_morosidad
              FROM timportventas v
              LEFT JOIN (
                  SELECT cv1.id, 
                         cv1.codcronogramaventas, 
                         cv1.fechapago, 
                         cv1.estado
                  FROM tcronogramaventas cv1
                  INNER JOIN (
                      SELECT id, 
                             MIN(CASE 
                                 WHEN fechapago IS NOT NULL THEN fechapago 
                                 ELSE '9999-12-31' 
                             END) as min_fecha
                      FROM tcronogramaventas
                      WHERE (estado = 'PENDIENTE' OR estado IS NULL OR estado = '')
                        AND fechapago IS NOT NULL
                      GROUP BY id
                  ) cv2 ON cv1.id = cv2.id 
                      AND CASE 
                          WHEN cv1.fechapago IS NOT NULL THEN cv1.fechapago 
                          ELSE '9999-12-31' 
                      END = cv2.min_fecha
                  WHERE (cv1.estado = 'PENDIENTE' OR cv1.estado IS NULL OR cv1.estado = '')
                      AND cv1.fechapago IS NOT NULL
              ) c ON v.id = c.id
              WHERE 1=1";
    
    // Filtrar por estado según el tipo
    if ($esLiquidados) {
        $query .= " AND v.estado <> 'ACTIVO'";
    } else {
        $query .= " AND v.estado = 'ACTIVO'";
    }
    
    $params = [];

    if ($codempresaUsuario) {
        $query .= " AND v.codempresa = ?";
        $params[] = $codempresaUsuario;
    }

    if ($search !== '') {
        $query .= " AND (v.nro_documento LIKE ? OR v.nombres_ap_raz_soc LIKE ?)";
        $searchTerm = "%{$search}%";
        $params[] = $searchTerm;
        $params[] = $searchTerm;
    }

    $query .= " ORDER BY v.fecha_creacion DESC, v.id DESC";

    $stmt = $conn->prepare($query);
    $stmt->execute($params);
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    // Nombre de archivo
    $fechaNombre = date('Ymd_His');
    $filename = $esLiquidados ? "liquidados_fijas_{$fechaNombre}.xls" : "cobranza_ventas_{$fechaNombre}.xls";

    // Encabezados para Excel (HTML table compatible)
    header('Content-Type: application/vnd.ms-excel; charset=UTF-8');
    header('Content-Disposition: attachment; filename=' . $filename);
    header('Pragma: no-cache');
    header('Expires: 0');

    // Salida como HTML con BOM para acentos
    echo "\xEF\xBB\xBF"; // BOM UTF-8
    echo "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head><body>";
    echo "<table border=\"1\" cellspacing=\"0\" cellpadding=\"5\">";
    // Construir encabezados según el tipo
    $headers = '<tr style="background:#e8f5e9;font-weight:bold">'
        . '<td>ID</td>'
        . '<td>Código Pago</td>'
        . '<td>Cliente</td>'
        . '<td>Tipo Doc</td>'
        . '<td>Nro Documento</td>'
        . '<td>Agente</td>'
        . '<td>Estado</td>';
    
    // Solo agregar columnas de morosidad si no es liquidados
    if (!$esLiquidados) {
        $headers .= '<td>Días Morosidad</td>'
            . '<td>Fecha Vencimiento</td>'
            . '<td>Estado Morosidad</td>';
    }
    
    $headers .= '<td>Paquete</td>'
        . '<td>Tecnología</td>'
        . '<td>Tipo Venta</td>';
    
    // Excluir columnas específicas para liquidados
    if (!$esLiquidados) {
        $headers .= '<td>UGIS</td>'
            . '<td>Total Decos</td>'
            . '<td>Full Claro</td>';
    }
    
    $headers .= '<td>Cargo Fijo</td>'
        . '<td>Departamento</td>'
        . '<td>Provincia</td>'
        . '<td>Distrito</td>'
        . '<td>Dirección</td>';
    
    // Excluir columnas específicas para liquidados
    if (!$esLiquidados) {
        $headers .= '<td>SEC</td>'
            . '<td>Fecha SEC</td>'
            . '<td>SOT</td>';
    }
    
    $headers .= '<td>Fecha Instalación</td>';
    
    // Excluir columnas específicas para liquidados
    if (!$esLiquidados) {
        $headers .= '<td>Estado SOT</td>'
            . '<td>Fecha Creación</td>';
    }
    
    $headers .= '<td>Fecha Edición</td>'
        . '</tr>';
    
    echo $headers;

    foreach ($rows as $r) {
        $fecha_creacion = $r['fecha_creacion'] ? date('d/m/Y', strtotime($r['fecha_creacion'])) : '';
        $fecha_edicion = $r['fecha_edicion'] ? date('d/m/Y', strtotime($r['fecha_edicion'])) : '';
        $fecha_sec = $r['fecha_sec'] ? date('d/m/Y', strtotime($r['fecha_sec'])) : '';
        $fecha_instalacion = $r['fecha_instalacion'] ? date('d/m/Y', strtotime($r['fecha_instalacion'])) : '';
        
        // Calcular información de morosidad
        $diasMorosidad = isset($r['dias_morosidad']) ? (int)$r['dias_morosidad'] : null;
        $tienePendiente = isset($r['primer_pendiente_fecha']) && $r['primer_pendiente_fecha'] !== null;
        $fechaVencimiento = $tienePendiente && $r['primer_pendiente_fecha'] ? date('d/m/Y', strtotime($r['primer_pendiente_fecha'])) : '';
        
        $estadoMorosidad = '';
        if ($tienePendiente && $diasMorosidad !== null) {
            if ($diasMorosidad < 0) {
                $estadoMorosidad = 'Al día';
            } elseif ($diasMorosidad == 0) {
                $estadoMorosidad = 'Vence hoy';
            } elseif ($diasMorosidad <= 7) {
                $estadoMorosidad = 'Morosidad Leve (1-7 días)';
            } elseif ($diasMorosidad <= 30) {
                $estadoMorosidad = 'Morosidad Moderada (8-30 días)';
            } else {
                $estadoMorosidad = 'Morosidad Alta (>30 días)';
            }
        } else {
            $estadoMorosidad = 'Al día';
        }
        
        // Formatear días de morosidad para mostrar
        if ($diasMorosidad !== null) {
            if ($diasMorosidad < 0) {
                $diasMorosidadTexto = 'Al día (' . abs($diasMorosidad) . ' días restantes)';
            } else {
                $diasMorosidadTexto = (string)$diasMorosidad;
            }
        } else {
            $diasMorosidadTexto = '';
        }

        // Construir fila según el tipo
        $row = '<tr>'
            . '<td>' . e($r['id']) . '</td>'
            . '<td>' . e($r['codigodepago']) . '</td>'
            . '<td>' . e($r['nombres_ap_raz_soc']) . '</td>'
            . '<td>' . e($r['tipo_documento']) . '</td>'
            . '<td style="mso-number-format:\\@;">' . e($r['nro_documento']) . '</td>'
            . '<td>' . e($r['agente']) . '</td>'
            . '<td>' . e($r['estado']) . '</td>';
        
        // Solo agregar columnas de morosidad si no es liquidados
        if (!$esLiquidados) {
            $row .= '<td>' . e($diasMorosidadTexto) . '</td>'
                . '<td>' . e($fechaVencimiento) . '</td>'
                . '<td>' . e($estadoMorosidad) . '</td>';
        }
        
        $row .= '<td>' . e($r['paquete_contratado']) . '</td>'
            . '<td>' . e($r['tecnologia']) . '</td>'
            . '<td>' . e($r['tipo_venta']) . '</td>';
        
        // Excluir columnas específicas para liquidados
        if (!$esLiquidados) {
            $row .= '<td>' . e($r['ugis']) . '</td>'
                . '<td>' . e($r['total_decos']) . '</td>'
                . '<td>' . e($r['full_claro']) . '</td>';
        }
        
        $row .= '<td>' . (isset($r['cargo_fijo']) && $r['cargo_fijo'] !== '' ? 'S/ ' . e($r['cargo_fijo']) : '') . '</td>'
            . '<td>' . e($r['departamento']) . '</td>'
            . '<td>' . e($r['provincia']) . '</td>'
            . '<td>' . e($r['distrito']) . '</td>'
            . '<td>' . e($r['direccion']) . '</td>';
        
        // Excluir columnas específicas para liquidados
        if (!$esLiquidados) {
            $row .= '<td>' . e($r['sec']) . '</td>'
                . '<td>' . e($fecha_sec) . '</td>'
                . '<td>' . e($r['sot']) . '</td>';
        }
        
        $row .= '<td>' . e($fecha_instalacion) . '</td>';
        
        // Excluir columnas específicas para liquidados
        if (!$esLiquidados) {
            $row .= '<td>' . e($r['estado_sot']) . '</td>'
                . '<td>' . e($fecha_creacion) . '</td>';
        }
        
        $row .= '<td>' . e($fecha_edicion) . '</td>'
            . '</tr>';
        
        echo $row;
    }

    echo '</table>';
    echo '</body></html>';
    exit;
} catch (Throwable $e) {
    http_response_code(500);
    header('Content-Type: text/plain; charset=UTF-8');
    echo 'Error al exportar: ' . $e->getMessage();
    exit;
}


