<?php
include('is_logged.php');
require_once ("../config/db.php");
require_once ("../config/conexion.php");

$action = (isset($_REQUEST['action']) && $_REQUEST['action'] != NULL) ? $_REQUEST['action'] : '';
$tienda_sesion = $_SESSION['estado'];
$user_id = $_SESSION['user_id'];
$user_role = $_SESSION['rol']; 

// Tasa de cambio
$query_tasa = mysqli_query($con, "SELECT tasa FROM tasa WHERE id_tasa='1'");
$row_tasa = mysqli_fetch_array($query_tasa);
$tasa_actual = $row_tasa['tasa'];

/* --- BLOQUE DE ANULACIÓN (Restricción Total si ya está pagada) --- */
if (isset($_GET['id'])) {
    $numero_factura = intval($_GET['id']);
    
    // Verificamos el estado antes de proceder
    $check_status = mysqli_query($con, "SELECT estado_factura FROM facturas WHERE numero_factura='$numero_factura'");
    $status_row = mysqli_fetch_array($check_status);
    
    // REGLA: Solo se anula si está Pendiente (estado 1) Y es Gerencia/Supervisor
    if ($status_row['estado_factura'] == 1 && ($user_role == 'gerencia' || $user_role == 'supervisor')) {
        $sql_factura = mysqli_query($con, "SELECT * FROM facturas WHERE numero_factura='$numero_factura'");
        $datos_f = mysqli_fetch_array($sql_factura);
        
        if ($datos_f) {
            $almacen_f = $datos_f['almacen'];
            $mensajes_reporte = "";
            $sql_det = mysqli_query($con, "SELECT id_producto, cantidad FROM detalle_factura WHERE numero_factura='$numero_factura'");
            
            while ($item = mysqli_fetch_array($sql_det)) {
                $id_final = intval($item['id_producto']);
                $cant_venda = floatval($item['cantidad']);
                
                $sql_comp = mysqli_query($con, "SELECT id_producto, cantidad FROM composicion_producto_final WHERE id_producto_final = '$id_final'");
                while ($receta = mysqli_fetch_array($sql_comp)) {
                    $id_insumo_origen = intval($receta['id_producto']);
                    $cant_base = floatval($receta['cantidad']);
                    $total_regresar = $cant_base * $cant_venda;
                    
                    $q_nom = mysqli_query($con, "SELECT nombre_producto FROM products WHERE id_producto='$id_insumo_origen'");
                    $r_nom = mysqli_fetch_array($q_nom);
                    $nombre_ingrediente = mysqli_real_escape_string($con, $r_nom['nombre_producto']);
                    
                    $q_tienda = mysqli_query($con, "SELECT id_producto FROM products WHERE nombre_producto='$nombre_ingrediente' AND almacen='$almacen_f'");
                    if (mysqli_num_rows($q_tienda) > 0) {
                        $r_tienda = mysqli_fetch_array($q_tienda);
                        $id_producto_destino = $r_tienda['id_producto'];
                        mysqli_query($con, "UPDATE products SET existencia = existencia + $total_regresar WHERE id_producto = '$id_producto_destino'");
                        $mensajes_reporte .= "<li><b>$nombre_ingrediente:</b> +$total_regresar.</li>";
                    }
                }
            }
            mysqli_query($con, "DELETE FROM facturas WHERE numero_factura='$numero_factura'");
            mysqli_query($con, "DELETE FROM detalle_factura WHERE numero_factura='$numero_factura'");
            echo "<div class='alert alert-info'>Factura #$numero_factura anulada e inventario devuelto.</div>";
        }
    } else {
        echo "<div class='alert alert-danger'>No es posible anular una factura que ya ha sido procesada o no tiene permisos.</div>";
    }
}

/* --- VISTA DE TABLA AJAX --- */
if($action == 'ajax') {
    $q = mysqli_real_escape_string($con, (strip_tags($_REQUEST['q'], ENT_QUOTES)));
    $ven = $_REQUEST['ven']; 
    $est = $_REQUEST['est']; 
    
    $sTable = "facturas 
               INNER JOIN clientes ON facturas.id_cliente = clientes.id_cliente 
               INNER JOIN users ON facturas.id_vendedor = users.user_id 
               LEFT JOIN tiendas ON facturas.almacen = tiendas.id_tienda";

    $sWhere = " WHERE 1=1";

    if ($user_role != 'gerencia') {
        if ($user_role == 'supervisor') {
            if (!empty($tienda_sesion)) $sWhere .= " AND facturas.almacen = '$tienda_sesion'";
        } else {
            $sWhere .= " AND facturas.id_vendedor = '$user_id'";
            if (!empty($tienda_sesion)) $sWhere .= " AND facturas.almacen = '$tienda_sesion'";
        }
    } elseif (!empty($est)) {
        $sWhere .= " AND facturas.almacen = '$est'";
    }

    // Filtros de búsqueda (iguales a tu versión original)
    if (!empty($ven)) {
        if ($ven == "Pendiente") { $sWhere .= " AND facturas.estado_factura='1' AND facturas.credito='NO'"; }
        elseif ($ven == "Pagada") { $sWhere .= " AND facturas.estado_factura='2'"; }
        elseif ($ven == "Credito") { $sWhere .= " AND facturas.credito='SI' AND facturas.estado_factura!='3'"; }
    }

    if (!empty($q)) {
        $sWhere .= " AND (clientes.nombre_cliente LIKE '%$q%' OR facturas.numero_factura LIKE '%$q%')";
    }

    $sWhere .= " ORDER BY facturas.fecha_factura DESC, facturas.id_factura DESC";
    
    include 'pagination.php';
    $page = (isset($_REQUEST['page']) && !empty($_REQUEST['page'])) ? $_REQUEST['page'] : 1;
    $per_page = 30;
    $offset = ($page - 1) * $per_page;

    $query_count = mysqli_query($con, "SELECT count(*) AS numrows FROM $sTable $sWhere");
    $row_count = mysqli_fetch_array($query_count);
    $numrows = $row_count['numrows'];
    $total_pages = ceil($numrows / $per_page);

    $sql = "SELECT facturas.*, clientes.nombre_cliente, users.firstname, users.lastname, tiendas.nombre as nombre_tienda FROM $sTable $sWhere LIMIT $offset, $per_page";
    $query = mysqli_query($con, $sql);

    if ($numrows > 0) {
        ?>
        <div class="table-responsive">
            <table class="table table-striped table-hover" style="font-size:12px;">
                <thead>
                    <tr class="warning">
                        <th>Tienda</th>
                        <th># Venta</th>
                        <th>Fecha</th>
                        <th>Vendedor</th>
                        <th>Cliente</th>
                        <th>Estado</th>
                        <th class='text-right'>Total ($/Bs)</th>
                        <th class='text-right'>Acciones</th>
                    </tr>
                </thead>
                <tbody>
                <?php
                while ($row = mysqli_fetch_array($query)) {
                    $id_f = $row['id_factura'];
                    $num_f = $row['numero_factura'];
                    $nombre_tienda = $row['nombre_tienda'];
                    $credito = $row['credito'];
                    $estado_f = $row['estado_factura'];
                    $condicion = $row['condiciones'];
                    $nombre_vendedor = $row['firstname']." ".$row['lastname'];
                    $por_cobrar = $row['por_cobrar'];
                    $abonos = $row['abono'];
                    $total_usd = $row['total_venta'];
                    $total_bs = $total_usd * $tasa_actual;

                    // Lógica de estados (Labels)
                    if ($condicion == "Liquidar") {
                        if ($estado_f == 1) {
                            if ($credito == "SI" && ($por_cobrar <= 0)) { $text_estado = "Crédito Pagado"; $label_class = 'label-success'; }
                            else if ($credito == "SI" && $abonos == 0) { $text_estado = "Crédito"; $label_class = 'label-primary'; }
                            else if ($credito == "SI" && $abonos > 0) { $text_estado = "Abonando"; $label_class = 'label-warning'; }
                            else { $text_estado = "Pendiente"; $label_class = 'label-danger'; }
                        } else {
                            $text_estado = ($credito == "SI") ? "Crédito Pagado" : "Pagada";
                            $label_class = 'label-success';
                        }
                    } else { $text_estado = "Donación"; $label_class = 'label-default'; }
                    ?>
                    <tr>
                        <td><b class="text-uppercase" style="color: #337ab7;"><?php echo $nombre_tienda; ?></b></td>
                        <td><?php echo $num_f; ?></td>
                        <td><?php echo date("d/m/Y", strtotime($row['fecha_factura'])); ?></td>
                        <td><?php echo $nombre_vendedor; ?></td>
                        <td><?php echo $row['nombre_cliente']; ?></td>
                        <td><span class="label <?php echo $label_class; ?>"><?php echo $text_estado; ?></span></td>
                        <td class='text-right'>
                            <strong>$<?php echo number_format($total_usd, 2); ?></strong><br>
                            <small class="text-success">Bs <?php echo number_format($total_bs, 2, ',', '.'); ?></small>
                        </td>
                        <td class="text-right">
                            <div class="btn-group btn-group-xs">
                                <a href="#" class='btn btn-default' title='Comanda' onclick="imprimir_comanda('<?php echo $id_f;?>');"><i class="glyphicon glyphicon-print"></i></a>
                                <a href="ver_venta.php?id_factura=<?php echo $id_f;?>" class='btn btn-default' title='Ver Detalle'><i class="glyphicon glyphicon-eye-open"></i></a>
                                
                                <?php if ($estado_f == 1 && $condicion == "Liquidar") { ?>
                                    
                                    <?php /* --- REGLA: EDITAR PERMITIDO PARA TODOS SI ESTÁ PENDIENTE --- */ ?>
                                    <a href="editar_factura.php?id_factura=<?php echo $id_f;?>" class='btn btn-info' title='Editar'><i class="glyphicon glyphicon-edit"></i></a>

                                    <?php /* --- BOTONES SOLO PARA SUPERVISOR / GERENCIA --- */ ?>
                                    <?php if ($user_role == 'gerencia' || $user_role == 'supervisor') { ?>
                                        
                                        <?php if ($credito == "SI"  && $user_role == 'gerencia') { ?>
                                            <a href="procesar_cobro.php?id_factura=<?php echo $id_f;?>" class='btn btn-success' title='Abonar'><i class="glyphicon glyphicon-credit-card"></i></a>
                                            <a href="#" class='btn btn-default' title='Edo. Cuenta' data-id="<?php echo $num_f;?>" data-id2="<?php echo $por_cobrar;?>" data-id3="<?php echo $abonos;?>" data-toggle="modal" data-target="#estado_cuenta_cli"><i class="glyphicon glyphicon-stats"></i></a>
                                        <?php } else { ?>
                                            <a href="pagar_factura.php?id_factura=<?php echo $id_f;?>" class='btn btn-primary' title='Pagar'><i class="glyphicon glyphicon-usd"></i></a>
                                        <?php } ?>
                                        
                                        <a href="#" class='btn btn-danger' title='Anular' onclick="eliminar('<?php echo $num_f; ?>')"><i class="glyphicon glyphicon-trash"></i></a>
                                        
                                    <?php } ?>
                                <?php } ?>
                            </div>
                        </td>
                    </tr>
                <?php } ?>
                </tbody>
            </table>
            <div class="clearfix">
                <span class="pull-right"><?php echo paginate("../facturas.php", $page, $total_pages, 4);?></span>
            </div>
        </div>
        <?php
    } else {
        echo "<div class='alert alert-warning'>No se encontraron registros.</div>";
    }
}
?>