<?php
declare(strict_types=1);

include 'sesion.php';
include 'concha.php';

if (!function_exists('e')) {
    function e($value): string
    {
        return htmlspecialchars((string)$value, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
    }
}

if (!function_exists('stmt_bind_params')) {
    function stmt_bind_params(mysqli_stmt $stmt, string $types, array &$params): void
    {
        if ($types === '' || empty($params)) {
            return;
        }

        $bind = [];
        $bind[] = $types;

        foreach ($params as $key => &$value) {
            $bind[] = &$value;
        }

        call_user_func_array([$stmt, 'bind_param'], $bind);
    }
}

if (!function_exists('build_query_url')) {
    function build_query_url(array $overrides = []): string
    {
        $params = [
            'filtro'       => $_GET['filtro'] ?? 'todos',
            'fecha_inicio' => $_GET['fecha_inicio'] ?? '',
            'fecha_fin'    => $_GET['fecha_fin'] ?? '',
            'buscar'       => $_GET['buscar'] ?? '',
            'p'            => $_GET['p'] ?? 1,
        ];

        foreach ($overrides as $k => $v) {
            if ($v === null) {
                unset($params[$k]);
            } else {
                $params[$k] = $v;
            }
        }

        return '?' . http_build_query($params);
    }
}

/* Textos por defecto para evitar warnings */
$nombresitio      = $nombresitio ?? 'Panel';
$idioma_100725    = $idioma_100725 ?? 'Panel de Administracion';
$idioma_100726    = $idioma_100726 ?? 'Mensajes del chat';
$idioma_100727    = $idioma_100727 ?? 'Esperando moderacion';
$idioma_100728    = $idioma_100728 ?? 'Aprobado';
$idioma_borrar    = $idioma_borrar ?? 'Borrar';
$idioma_aceptar   = $idioma_aceptar ?? 'Aceptar';
$idioma_100724    = $idioma_100724 ?? 'Ver IP';
$idioma_100729    = $idioma_100729 ?? 'Anterior';
$idioma_100730    = $idioma_100730 ?? 'Siguiente';
$idioma_volver    = $idioma_volver ?? 'Volver';

$pagina = 'todo_chat.php';
$tabla  = 'chat';
$porPagina = 15;

$filtro       = isset($_GET['filtro']) ? trim((string)$_GET['filtro']) : 'todos';
$fecha_inicio = isset($_GET['fecha_inicio']) ? trim((string)$_GET['fecha_inicio']) : '';
$fecha_fin    = isset($_GET['fecha_fin']) ? trim((string)$_GET['fecha_fin']) : '';
$buscar       = isset($_GET['buscar']) ? trim((string)$_GET['buscar']) : '';
$p            = isset($_GET['p']) ? max(1, (int)$_GET['p']) : 1;

if ($filtro !== 'pendientes' && $filtro !== 'todos') {
    $filtro = 'todos';
}

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
    $mysqli = new mysqli((string)$host, (string)$usuario, (string)$contra, (string)$basedatos);
    $mysqli->set_charset('utf8mb4');
} catch (Throwable $e) {
    http_response_code(500);
    exit('Error de conexión a la base de datos.');
}

/* Filtros dinámicos */
$where  = [];
$params = [];
$types  = '';

if ($filtro === 'pendientes') {
    $where[] = "(`ver` = 'no' OR `ver` = '00' OR `ver` = '' OR `ver` IS NULL)";
}

if ($fecha_inicio !== '') {
    $where[] = "DATE(`fecha`) >= ?";
    $params[] = $fecha_inicio;
    $types .= 's';
}

if ($fecha_fin !== '') {
    $where[] = "DATE(`fecha`) <= ?";
    $params[] = $fecha_fin;
    $types .= 's';
}

if ($buscar !== '') {
    $where[] = "(`nombre` LIKE ? OR `mensaje` LIKE ? OR `IP` LIKE ?)";
    $like = '%' . $buscar . '%';
    $params[] = $like;
    $params[] = $like;
    $params[] = $like;
    $types .= 'sss';
}

$whereSql = '';
if (!empty($where)) {
    $whereSql = ' WHERE ' . implode(' AND ', $where);
}

/* Total registros */
$sqlCount = "SELECT COUNT(*) AS total FROM `$tabla`" . $whereSql;
$stmtCount = $mysqli->prepare($sqlCount);
stmt_bind_params($stmtCount, $types, $params);
$stmtCount->execute();
$resCount = $stmtCount->get_result();
$rowCount = $resCount->fetch_assoc();
$totalRegistros = isset($rowCount['total']) ? (int)$rowCount['total'] : 0;
$resCount->free();
$stmtCount->close();

$totalPaginas = (int)ceil($totalRegistros / $porPagina);
if ($totalPaginas < 1) {
    $totalPaginas = 1;
}
if ($p > $totalPaginas) {
    $p = $totalPaginas;
}

$offset = ($p - 1) * $porPagina;

/* Consulta principal */
$sql = "SELECT `ID`, `fecha`, `nombre`, `mensaje`, `ver`, `IP`
        FROM `$tabla`
        $whereSql
        ORDER BY `ID` DESC
        LIMIT ?, ?";

$paramsListado = $params;
$typesListado  = $types . 'ii';
$paramsListado[] = $offset;
$paramsListado[] = $porPagina;

$stmt = $mysqli->prepare($sql);
stmt_bind_params($stmt, $typesListado, $paramsListado);
$stmt->execute();
$resultado = $stmt->get_result();
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta name="description" content="Panel de Administracion">
    <meta name="author" content="<?php echo e($nombresitio); ?>">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <title><?php echo e($nombresitio); ?> - Panel de Administracion</title>

    <link href="http://fonts.googleapis.com/css?family=Oswald" rel="stylesheet" type="text/css">
    <link rel="shortcut icon" href="" type="image/x-icon">
    <link rel="apple-touch-icon" href="">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">

    <style type="text/css">
        * {
            border-radius: 0 !important;
        }

        body {
            background-image: url(../fondeux.jpg);
        }

        .navbar {
            position: relative;
            min-height: 50px;
            padding-bottom: 20px;
        }

        .btn-primary,
        .btn-info,
        .btn-secondary {
            color: #fff !important;
        }

        .btn-primary {
            background-color: #0066FF;
            border-color: #0066FF;
        }

        .page-header {
            margin: 0;
            padding: 1em;
            background-color: #0066FF;
            border: 0;
            text-align: center;
        }

        .page-header h2 {
            color: #ffffff;
            font-weight: bold;
            margin: 0;
        }

        .filtros-box {
            background: #f8f9fa;
            border: 1px solid #ddd;
            padding: 15px;
            margin-bottom: 20px;
        }

        .resumen-box {
            background: #eef4ff;
            border: 1px solid #cfe0ff;
            padding: 10px 15px;
            margin-bottom: 20px;
        }

        .mensaje-item {
            background: #fff;
        }

        .ip-box {
            background: #fafafa;
            border: 1px solid #e5e5e5;
            border-top: 0;
            margin-top: -16px;
            margin-bottom: 20px;
            padding: 10px 15px;
        }

        .paginacion a,
        .paginacion span {
            display: inline-block;
            margin: 4px;
        }

        .estado-label {
            font-size: 13px;
            font-weight: bold;
            text-transform: uppercase;
        }

        .estado-pendiente {
            color: #0066FF;
        }

        .estado-aprobado {
            color: #28a745;
        }

        .texto-mensaje {
            white-space: pre-wrap;
            word-break: break-word;
        }

        .titulo-seccion {
            font-weight: bold;
            margin-bottom: 15px;
        }
    </style>
</head>
<body>

<div class="container" style="background-color:#F1F2ED;">
    <?php include 'menu.php'; ?>
</div>

<div role="main" style="background-color:#fff;" class="container pt-3">

    <div class="page-header">
        <h2><?php echo e($idioma_100725); ?></h2>
    </div>

    <div class="row pt-3">

        <div class="col-12 text-center mb-3">
            <h3><?php echo e($idioma_100726); ?></h3>
        </div>

        <div class="col-12">
            <div class="filtros-box">

                <div class="row mb-3">
                    <div class="col-md-4 col-12 mb-2">
                        <a class="btn btn-primary btn-block" href="<?php echo e(build_query_url(['filtro' => 'pendientes', 'p' => 1])); ?>">
                            Esperando moderacion
                        </a>
                    </div>
                    <div class="col-md-4 col-12 mb-2">
                        <a class="btn btn-secondary btn-block" href="<?php echo e(build_query_url(['filtro' => 'todos', 'p' => 1])); ?>">
                            Ver todos los mensajes
                        </a>
                    </div>
                    <div class="col-md-4 col-12 mb-2">
                        <a class="btn btn-outline-dark btn-block" href="<?php echo e($pagina); ?>">
                            Limpiar filtros
                        </a>
                    </div>
                </div>

                <form method="get" action="<?php echo e($pagina); ?>">
                    <input type="hidden" name="filtro" value="<?php echo e($filtro); ?>">

                    <div class="row">
                        <div class="col-md-3 col-12 mb-2">
                            <label>Inicio</label>
                            <input type="date" name="fecha_inicio" class="form-control" value="<?php echo e($fecha_inicio); ?>">
                        </div>

                        <div class="col-md-3 col-12 mb-2">
                            <label>Fin</label>
                            <input type="date" name="fecha_fin" class="form-control" value="<?php echo e($fecha_fin); ?>">
                        </div>

                        <div class="col-md-4 col-12 mb-2">
                            <label>Buscar mensaje</label>
                            <input type="text" name="buscar" class="form-control" value="<?php echo e($buscar); ?>" placeholder="Nombre, mensaje o IP">
                        </div>

                        <div class="col-md-2 col-12 mb-2 d-flex align-items-end">
                            <button type="submit" class="btn btn-info btn-block">
                                Ver mensajes por fecha
                            </button>
                        </div>
                    </div>
                </form>

            </div>
        </div>

        <div class="col-12">
            <div class="resumen-box">
                <strong>Total encontrados:</strong> <?php echo (int)$totalRegistros; ?>
                |
                <strong>Página:</strong> <?php echo (int)$p; ?> / <?php echo (int)$totalPaginas; ?>
                |
                <strong>Filtro actual:</strong>
                <?php echo ($filtro === 'pendientes') ? 'Esperando moderacion' : 'Todos'; ?>
            </div>
        </div>

        <div class="col-12">
            <div class="container-fluid text-center my-3">
                <div class="row px-3">
                    <div class="col py-3 px-0 border border-primary"><?php echo e($idioma_100727); ?></div>
                    <div class="col py-3 px-0 border border-success"><?php echo e($idioma_100728); ?></div>
                </div>
            </div>
        </div>

        <div class="col-12">

            <?php if ($totalRegistros === 0): ?>
                <div class="alert alert-warning">
                    No se encontraron mensajes con esos filtros.
                </div>
            <?php endif; ?>

            <?php while ($row = $resultado->fetch_assoc()): ?>
                <?php
                $id      = isset($row['ID']) ? (int)$row['ID'] : 0;
                $fecha   = $row['fecha'] ?? '';
                $nombre  = $row['nombre'] ?? '';
                $mensaje = $row['mensaje'] ?? '';
                $ver     = $row['ver'] ?? '';
                $ip      = $row['IP'] ?? '';

                $esPendiente = ($ver === 'no' || $ver === '00' || $ver === '' || $ver === null);
                $claseBorde  = $esPendiente ? 'primary' : 'success';
                $estadoTexto = $esPendiente ? 'Esperando moderacion' : 'Aprobado';
                $estadoClase = $esPendiente ? 'estado-pendiente' : 'estado-aprobado';
                ?>

                <div class="row mb-3 border border-<?php echo e($claseBorde); ?> p-3 mensaje-item">
                    <div class="col-md-10 col-12">
                        <div class="d-flex justify-content-between flex-wrap">
                            <h3 class="mb-2"><?php echo e($nombre); ?></h3>
                            <p class="mb-2"><?php echo e($fecha); ?></p>
                        </div>

                        <div class="mb-2">
                            <span class="estado-label <?php echo e($estadoClase); ?>"><?php echo e($estadoTexto); ?></span>
                        </div>

                        <div>
                            <b>Comentario</b>
                            <p class="texto-mensaje mb-0"><?php echo e($mensaje); ?></p>
                        </div>
                    </div>

                    <div class="col-md-2 col-12 text-center mt-md-0 mt-3">
                        <a class="btn btn-outline-primary btn-block mb-2" href="borrar_chat_t.php?ID=<?php echo $id; ?>">
                            <?php echo e($idioma_borrar); ?>
                        </a>

                        <?php if ($esPendiente): ?>
                            <a class="btn btn-primary btn-block" href="aceptar_chat_t.php?ID=<?php echo $id; ?>">
                                <?php echo e($idioma_aceptar); ?>
                            </a>
                        <?php endif; ?>
                    </div>
                </div>

                <?php if ($ip !== ''): ?>
                    <div class="ip-box">
                        <a class="btn btn-link p-0 mb-2" target="_blank" rel="noopener noreferrer" href="http://es.geoipview.com/?q=<?php echo rawurlencode($ip); ?>&x=12&y=11">
                            <?php echo e($idioma_100724); ?>
                        </a>
                        <p class="mb-0"><?php echo e($ip); ?></p>
                    </div>
                <?php endif; ?>

            <?php endwhile; ?>

        </div>

        <div class="col-12 text-center paginacion mt-3">

            <?php if ($p > 1): ?>
                <a class="btn btn-primary" href="<?php echo e(build_query_url(['p' => $p - 1])); ?>">
                    <?php echo e($idioma_100729); ?>
                </a>
            <?php endif; ?>

            <?php
            for ($paginaNum = 1; $paginaNum <= $totalPaginas; $paginaNum++):
                if ($paginaNum == $p):
            ?>
                <span class="btn btn-dark"><?php echo $paginaNum; ?></span>
            <?php else: ?>
                <a class="btn btn-outline-primary" href="<?php echo e(build_query_url(['p' => $paginaNum])); ?>">
                    <?php echo $paginaNum; ?>
                </a>
            <?php
                endif;
            endfor;
            ?>

            <?php if ($p < $totalPaginas): ?>
                <a class="btn btn-primary" href="<?php echo e(build_query_url(['p' => $p + 1])); ?>">
                    <?php echo e($idioma_100730); ?>
                </a>
            <?php endif; ?>

        </div>

        <div class="col-12 text-center p-3">
            <a class="btn btn-primary mb-3" href="index.php"><?php echo e($idioma_volver); ?></a>
        </div>

    </div>
</div>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</body>
</html>
<?php
$resultado->free();
$stmt->close();
$mysqli->close();
?>