<?php

declare(strict_types=1);

require_once __DIR__ . '/init.php';

$titulo_pagina = 'Panel Principal';
$idAdmin = (int) ($_SESSION['admin']['uid'] ?? 0);
$role = (string) ($_SESSION['admin']['rol'] ?? '');
$userName = (string) ($_SESSION['admin']['nombre_usuario'] ?? 'Usuario');
$userEmail = (string) ($_SESSION['admin']['correo'] ?? '');
$userPhone = (string) ($_SESSION['admin']['telefono'] ?? '');
$currencySymbol = $ui_currency_symbol ?? 'S/';
$error = '';

$superData = [
    'admins' => 0,
    'active_subscriptions' => 0,
    'public_plans' => 0,
    'month_revenue' => 0.0,
    'expiring' => [],
    'recent_payments' => [],
    'revenue_labels' => [],
    'revenue_values' => [],
    'state_labels' => [],
    'state_values' => [],
];

$adminData = [
    'plan_name' => 'Sin plan',
    'end_date' => null,
    'state' => 'sin_plan',
    'limits' => ['buzones' => null, 'dominios' => null, 'cuentas' => null, 'consultas' => null],
    'usage' => ['buzones' => 0, 'dominios' => 0, 'cuentas' => 0, 'clientes' => 0, 'consultas' => 0],
    'expiring_accounts' => [],
    'platform_labels' => [],
    'platform_values' => [],
];

$superadmin_telefono = '';
$planes_para_solicitud_admin = [];

try {
    $superadmin_telefono = (string) $pdo->query("SELECT telefono FROM usuarios WHERE id_rol = 1 ORDER BY id LIMIT 1")->fetchColumn();

    if ($role === 'Superadmin') {
        $superData['admins'] = (int) $pdo->query("SELECT COUNT(*) FROM usuarios u JOIN roles r ON r.id = u.id_rol WHERE r.nombre_rol IN ('Admin', 'Ayudante de Superadmin')")->fetchColumn();
        $superData['active_subscriptions'] = (int) $pdo->query("SELECT COUNT(*) FROM suscripciones WHERE estado IN ('activa','prueba') AND fecha_fin >= NOW()")->fetchColumn();
        $superData['public_plans'] = (int) $pdo->query('SELECT COUNT(*) FROM planes WHERE visible_publico = 1 AND activo = 1 AND es_interno = 0')->fetchColumn();
        $superData['month_revenue'] = (float) $pdo->query("SELECT COALESCE(SUM(monto),0) FROM pagos WHERE COALESCE(estado_pago,'confirmado')='confirmado' AND fecha_pago >= DATE_FORMAT(CURDATE(),'%Y-%m-01')")->fetchColumn();

        $superData['expiring'] = $pdo->query(
            "SELECT s.id, s.fecha_fin, s.estado, u.nombre_usuario, u.correo, p.nombre_plan,
                    DATEDIFF(s.fecha_fin, CURDATE()) AS dias
             FROM suscripciones s
             JOIN usuarios u ON u.id = s.id_admin
             JOIN planes p ON p.id = s.id_plan
             WHERE s.estado IN ('activa','prueba') AND s.fecha_fin BETWEEN NOW() AND DATE_ADD(NOW(), INTERVAL 30 DAY)
             ORDER BY s.fecha_fin ASC LIMIT 8"
        )->fetchAll(PDO::FETCH_ASSOC);

        $superData['recent_payments'] = $pdo->query(
            "SELECT pg.id, pg.fecha_pago, pg.monto, pg.moneda, pg.metodo_pago,
                    u.nombre_usuario, p.nombre_plan
             FROM pagos pg
             JOIN suscripciones s ON s.id = pg.id_suscripcion
             JOIN usuarios u ON u.id = s.id_admin
             JOIN planes p ON p.id = s.id_plan
             WHERE COALESCE(pg.estado_pago,'confirmado')='confirmado'
             ORDER BY pg.fecha_pago DESC, pg.id DESC LIMIT 8"
        )->fetchAll(PDO::FETCH_ASSOC);

        $revenueStmt = $pdo->query(
            "SELECT DATE_FORMAT(months.month_start,'%Y-%m') AS periodo,
                    DATE_FORMAT(months.month_start,'%b') AS etiqueta,
                    COALESCE(SUM(pg.monto),0) AS total
             FROM (
                SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH),'%Y-%m-01') AS month_start
                UNION ALL SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 4 MONTH),'%Y-%m-01')
                UNION ALL SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 3 MONTH),'%Y-%m-01')
                UNION ALL SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 2 MONTH),'%Y-%m-01')
                UNION ALL SELECT DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 1 MONTH),'%Y-%m-01')
                UNION ALL SELECT DATE_FORMAT(CURDATE(),'%Y-%m-01')
             ) months
             LEFT JOIN pagos pg ON DATE_FORMAT(pg.fecha_pago,'%Y-%m')=DATE_FORMAT(months.month_start,'%Y-%m')
                AND COALESCE(pg.estado_pago,'confirmado')='confirmado'
             GROUP BY months.month_start ORDER BY months.month_start"
        );
        foreach ($revenueStmt as $row) {
            $superData['revenue_labels'][] = ucfirst((string) $row['etiqueta']);
            $superData['revenue_values'][] = (float) $row['total'];
        }

        $stateStmt = $pdo->query("SELECT estado, COUNT(*) total FROM suscripciones GROUP BY estado ORDER BY total DESC");
        foreach ($stateStmt as $row) {
            $superData['state_labels'][] = ucfirst((string) $row['estado']);
            $superData['state_values'][] = (int) $row['total'];
        }
    } else {
        $planStmt = $pdo->prepare(
            "SELECT s.fecha_fin, s.estado, p.nombre_plan, p.limite_buzones, p.limite_dominios,
                    p.limite_cuentas, p.limite_consultas
             FROM suscripciones s JOIN planes p ON p.id=s.id_plan
             WHERE s.id_admin=? ORDER BY s.fecha_fin DESC, s.id DESC LIMIT 1"
        );
        $planStmt->execute([$idAdmin]);
        if ($plan = $planStmt->fetch(PDO::FETCH_ASSOC)) {
            $adminData['plan_name'] = (string) $plan['nombre_plan'];
            $adminData['end_date'] = $plan['fecha_fin'];
            $adminData['state'] = (string) $plan['estado'];
            $adminData['limits'] = [
                'buzones' => $plan['limite_buzones'],
                'dominios' => $plan['limite_dominios'],
                'cuentas' => $plan['limite_cuentas'],
                'consultas' => $plan['limite_consultas'],
            ];
        }

        $countQueries = [
            'buzones' => ['SELECT COUNT(*) FROM configuraciones_imap WHERE id_admin=?', [$idAdmin]],
            'dominios' => ['SELECT COUNT(*) FROM dominios WHERE id_admin_propietario=?', [$idAdmin]],
            'cuentas' => ['SELECT COUNT(*) FROM correos_servicios WHERE id_admin_propietario=?', [$idAdmin]],
            'clientes' => ['SELECT COUNT(*) FROM usuarios WHERE id_admin_propietario=?', [$idAdmin]],
        ];
        foreach ($countQueries as $key => [$sqlCount, $paramsCount]) {
            $stmtCount = $pdo->prepare($sqlCount);
            $stmtCount->execute($paramsCount);
            $adminData['usage'][$key] = (int) $stmtCount->fetchColumn();
        }
        $usageStmt = $pdo->prepare('SELECT consultas_realizadas FROM uso_consultas WHERE id_admin=? AND periodo=? LIMIT 1');
        $usageStmt->execute([$idAdmin, date('Y-m')]);
        $adminData['usage']['consultas'] = (int) ($usageStmt->fetchColumn() ?: 0);

        $expiringStmt = $pdo->prepare(
            "SELECT cs.id, cs.correo, cs.fecha_renovacion, p.nombre plataforma,
                    u.nombre_usuario cliente, u.telefono,
                    DATEDIFF(cs.fecha_renovacion,CURDATE()) dias
             FROM correos_servicios cs
             JOIN plataformas p ON p.id=cs.id_plataforma
             LEFT JOIN asociaciones a ON a.id_correo_servicio=cs.id
             LEFT JOIN usuarios u ON u.id=a.id_usuario
             WHERE cs.id_admin_propietario=? AND cs.fecha_renovacion <= DATE_ADD(CURDATE(),INTERVAL 30 DAY)
             GROUP BY cs.id,cs.correo,cs.fecha_renovacion,p.nombre,u.nombre_usuario,u.telefono
             ORDER BY cs.fecha_renovacion ASC LIMIT 10"
        );
        $expiringStmt->execute([$idAdmin]);
        $adminData['expiring_accounts'] = $expiringStmt->fetchAll(PDO::FETCH_ASSOC);

        $platformStmt = $pdo->prepare(
            "SELECT p.nombre, COUNT(cs.id) total
             FROM plataformas p JOIN correos_servicios cs ON cs.id_plataforma=p.id
             WHERE cs.id_admin_propietario=? GROUP BY p.id,p.nombre ORDER BY total DESC LIMIT 7"
        );
        $platformStmt->execute([$idAdmin]);
        foreach ($platformStmt as $row) {
            $adminData['platform_labels'][] = (string) $row['nombre'];
            $adminData['platform_values'][] = (int) $row['total'];
        }

        $planes_para_solicitud_admin = $pdo->query(
            "SELECT id,nombre_plan,descripcion,precio_mensual,precio_anual,permite_mensual,permite_anual,
                    limite_buzones,limite_dominios,limite_cuentas
             FROM planes
             WHERE visible_publico=1 AND activo=1 AND es_interno=0 AND nombre_plan<>'Gratis'
               AND ((permite_mensual=1 AND COALESCE(precio_mensual,0)>0)
                 OR (permite_anual=1 AND COALESCE(precio_anual,0)>0))
             ORDER BY orden_publico ASC,id ASC"
        )->fetchAll(PDO::FETCH_ASSOC);
    }
} catch (Throwable $e) {
    $error = 'No se pudieron cargar todos los indicadores del panel.';
    error_log('Dashboard: ' . $e->getMessage());
}

require_once __DIR__ . '/admin_header.php';

function dashboard_limit(mixed $limit): string
{
    return ($limit === null || $limit === '' || !is_numeric((string) $limit) || (int) $limit <= 0) ? 'Ilimitado' : number_format((int) $limit);
}

function dashboard_percent(int $used, mixed $limit): int
{
    if ($limit === null || $limit === '' || !is_numeric((string) $limit) || (int) $limit <= 0) {
        return min(100, $used > 0 ? 45 : 0);
    }
    return min(100, max(0, (int) round(($used / (int) $limit) * 100)));
}


function dashboard_renewal_data(array $row): array
{
    $days = (int) ($row['dias'] ?? 0);
    $date = !empty($row['fecha_renovacion'])
        ? date('d/m/Y', strtotime((string) $row['fecha_renovacion']))
        : 'sin fecha';
    $client = trim((string) ($row['cliente'] ?? '')) ?: 'cliente';
    $platform = trim((string) ($row['plataforma'] ?? '')) ?: 'tu plataforma';
    $account = trim((string) ($row['correo'] ?? ''));

    if ($days < 0) {
        $label = 'Vencida';
        $detail = abs($days) === 1 ? 'Venció ayer' : 'Venció hace ' . abs($days) . ' días';
        $badge = 'af-badge-danger';
        $statusLine = '🔴 *Estado:* Vencida (' . $detail . ')';
        $closing = "Tu acceso se encuentra vencido. Escríbenos para confirmar la renovación y restablecer la continuidad del servicio.";
    } elseif ($days === 0) {
        $label = 'Vence hoy';
        $detail = 'Renovación inmediata';
        $badge = 'af-badge-danger';
        $statusLine = '🟠 *Estado:* Vence hoy';
        $closing = "Tu acceso vence hoy. Confírmanos la renovación para mantener el servicio activo sin interrupciones.";
    } elseif ($days <= 7) {
        $label = 'Por vencer';
        $detail = $days === 1 ? 'Vence mañana' : "Vence en {$days} días";
        $badge = 'af-badge-warning';
        $statusLine = '🟡 *Estado:* ' . $detail;
        $closing = "Puedes confirmar la renovación desde ahora para dejarla preparada y evitar interrupciones.";
    } else {
        $label = 'Próxima';
        $detail = "Vence en {$days} días";
        $badge = 'af-badge-success';
        $statusLine = '🟢 *Estado:* ' . $detail;
        $closing = "Te enviamos este recordatorio con anticipación. Puedes confirmar la renovación cuando estés listo.";
    }

    $message = "🔔 *RECORDATORIO DE RENOVACIÓN*\n\n"
        . "Hola *{$client}*, esperamos que te encuentres bien.\n\n"
        . "📺 *Servicio:* {$platform}\n"
        . "📧 *Cuenta:* {$account}\n"
        . "📅 *Fecha de renovación:* {$date}\n"
        . $statusLine . "\n\n"
        . $closing . "\n\n"
        . "✅ *Para renovar:* responde a este mensaje y te ayudaremos de inmediato.\n\n"
        . "Gracias por confiar en nuestro servicio. 🙌";

    return compact('label', 'detail', 'badge', 'message');
}
?>
<div class="af-page">
    <?php if ($error !== ''): ?><div class="af-alert af-alert-danger"><i class="fas fa-triangle-exclamation"></i><div><?= htmlspecialchars($error) ?></div></div><?php endif; ?>

    <?php if ($role === 'Superadmin'): ?>
        <header class="af-heading"><div class="af-heading-main"><span class="af-heading-icon"><i class="fas fa-chart-pie"></i></span><div><p class="af-eyebrow">Resumen general</p><h1>Estado del sistema</h1><p>Indicadores principales de administradores, suscripciones, planes e ingresos confirmados.</p></div></div><div class="af-heading-actions"><a href="gestionar_suscripciones.php" class="af-btn af-btn-primary"><i class="fas fa-id-card"></i> Suscriptores</a><a href="gestionar_reportes.php" class="af-btn af-btn-secondary"><i class="fas fa-chart-column"></i> Reportes</a></div></header>
        <section class="af-stats"><article class="af-stat"><span class="af-stat-icon"><i class="fas fa-user-tie"></i></span><div><p class="af-stat-label">Administradores</p><p class="af-stat-value"><?= number_format($superData['admins']) ?></p><div class="af-stat-note">Cuentas Admin registradas</div></div></article><article class="af-stat"><span class="af-stat-icon"><i class="fas fa-circle-check"></i></span><div><p class="af-stat-label">Suscripciones activas</p><p class="af-stat-value"><?= number_format($superData['active_subscriptions']) ?></p><div class="af-stat-note">Activas o en prueba</div></div></article><article class="af-stat"><span class="af-stat-icon"><i class="fas fa-layer-group"></i></span><div><p class="af-stat-label">Planes públicos</p><p class="af-stat-value"><?= number_format($superData['public_plans']) ?></p><div class="af-stat-note">Disponibles en la portada</div></div></article><article class="af-stat"><span class="af-stat-icon"><i class="fas fa-coins"></i></span><div><p class="af-stat-label">Ingresos del mes</p><p class="af-stat-value"><?= htmlspecialchars($currencySymbol) ?> <?= number_format($superData['month_revenue'],2) ?></p><div class="af-stat-note">Pagos confirmados</div></div></article></section>
        <section class="af-report-grid"><article class="af-panel"><div class="af-panel-head"><div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-chart-line"></i></span><div><h2>Ingresos de seis meses</h2><p>Evolución de pagos confirmados.</p></div></div></div><div class="af-panel-body" style="height:280px"><canvas id="dashboardRevenue"></canvas></div></article><article class="af-panel"><div class="af-panel-head"><div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-chart-pie"></i></span><div><h2>Estados de suscripción</h2><p>Distribución actual del sistema.</p></div></div></div><div class="af-panel-body" style="height:280px"><canvas id="dashboardStates"></canvas></div></article></section>
        <section class="af-report-grid"><article class="af-panel"><div class="af-panel-head"><div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-calendar-day"></i></span><div><h2>Suscripciones próximas a vencer</h2><p>Vencen durante los siguientes 30 días.</p></div></div><a href="gestionar_suscripciones.php" class="af-btn af-btn-secondary">Ver todas</a></div><div class="af-table-wrap"><table class="af-table"><thead><tr><th>Administrador</th><th>Plan</th><th>Vencimiento</th><th>Días</th></tr></thead><tbody><?php foreach($superData['expiring'] as $row): ?><tr><td><span class="af-row-title"><?= htmlspecialchars((string)$row['nombre_usuario']) ?></span><span class="af-row-sub"><?= htmlspecialchars((string)$row['correo']) ?></span></td><td><?= htmlspecialchars((string)$row['nombre_plan']) ?></td><td><?= date('d/m/Y',strtotime((string)$row['fecha_fin'])) ?></td><td><span class="af-badge <?= (int)$row['dias']<=7?'af-badge-danger':'af-badge-warning' ?>"><?= number_format((int)$row['dias']) ?> días</span></td></tr><?php endforeach; ?><?php if(!$superData['expiring']): ?><tr><td colspan="4"><div class="af-empty"><i class="fas fa-circle-check"></i><strong>No hay vencimientos próximos</strong></div></td></tr><?php endif; ?></tbody></table></div></article><article class="af-panel"><div class="af-panel-head"><div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-receipt"></i></span><div><h2>Pagos recientes</h2><p>Últimos pagos confirmados.</p></div></div><a href="gestionar_pagos.php" class="af-btn af-btn-secondary">Historial</a></div><div class="af-table-wrap"><table class="af-table"><thead><tr><th>Administrador</th><th>Plan</th><th>Monto</th><th>Fecha</th></tr></thead><tbody><?php foreach($superData['recent_payments'] as $row): ?><tr><td><?= htmlspecialchars((string)$row['nombre_usuario']) ?></td><td><?= htmlspecialchars((string)$row['nombre_plan']) ?></td><td><strong><?= htmlspecialchars((string)($row['moneda']?:'PEN')) ?> <?= number_format((float)$row['monto'],2) ?></strong></td><td><?= date('d/m/Y',strtotime((string)$row['fecha_pago'])) ?></td></tr><?php endforeach; ?><?php if(!$superData['recent_payments']): ?><tr><td colspan="4"><div class="af-empty"><i class="fas fa-receipt"></i><strong>Sin pagos recientes</strong></div></td></tr><?php endif; ?></tbody></table></div></article></section>
    <?php else: ?>
        <?php $planActive=in_array($adminData['state'],['activa','prueba'],true); ?>
        <header class="af-heading"><div class="af-heading-main"><span class="af-heading-icon"><i class="fas fa-gauge-high"></i></span><div><p class="af-eyebrow">Resumen de mi operación</p><h1>Panel principal</h1><p>Controla la capacidad de tu plan, las cuentas que requieren renovación y los accesos directos a tus módulos de trabajo.</p></div></div><div class="af-heading-actions"><button type="button" id="openMyDataQuick" class="af-btn af-btn-secondary"><i class="fas fa-user-pen"></i> Mis datos</button><a href="mi_suscripcion.php" class="af-btn af-btn-primary"><i class="fas fa-wallet"></i> Mi suscripción</a></div></header>
        <section class="af-stats dashboard-five-stats"><article class="af-stat"><span class="af-stat-icon"><i class="fas fa-gem"></i></span><div><p class="af-stat-label">Plan actual</p><p class="af-stat-value" style="font-size:18px"><?= htmlspecialchars($adminData['plan_name']) ?></p><div class="af-stat-note"><?= htmlspecialchars(ucfirst($adminData['state'])) ?><?= $adminData['end_date']?' · hasta '.date('d/m/Y',strtotime((string)$adminData['end_date'])):'' ?></div></div></article><?php foreach([['buzones','Buzones','fa-inbox'],['dominios','Dominios','fa-at'],['cuentas','Cuentas','fa-envelope'],['clientes','Clientes','fa-users']] as [$key,$label,$icon]): ?><article class="af-stat"><span class="af-stat-icon"><i class="fas <?= $icon ?>"></i></span><div><p class="af-stat-label"><?= $label ?></p><p class="af-stat-value"><?= number_format($adminData['usage'][$key]) ?></p><div class="af-stat-note"><?= $key==='clientes'?'Usuarios registrados':'Límite: '.dashboard_limit($adminData['limits'][$key]??null) ?></div></div></article><?php endforeach; ?></section>
        <section class="af-report-grid"><article class="af-panel"><div class="af-panel-head"><div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-sliders"></i></span><div><h2>Uso del plan</h2><p>Capacidad utilizada en los recursos principales.</p></div></div><span class="af-badge <?= $planActive?'af-badge-success':'af-badge-danger' ?>"><?= htmlspecialchars(ucfirst($adminData['state'])) ?></span></div><div class="af-panel-body space-y-5"><?php foreach([['buzones','Buzones'],['dominios','Dominios'],['cuentas','Cuentas'],['consultas','Consultas del mes']] as [$key,$label]):$pct=dashboard_percent($adminData['usage'][$key],$adminData['limits'][$key]); ?><div><div class="flex items-center justify-between gap-4 mb-2 text-sm"><strong><?= $label ?></strong><span><?= number_format($adminData['usage'][$key]) ?> / <?= dashboard_limit($adminData['limits'][$key]) ?></span></div><div class="af-progress"><span style="width:<?= $pct ?>%"></span></div></div><?php endforeach; ?></div></article><article class="af-panel"><div class="af-panel-head"><div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-tv"></i></span><div><h2>Cuentas por plataforma</h2><p>Distribución de tus cuentas activas.</p></div></div></div><div class="af-panel-body" style="height:300px"><canvas id="dashboardPlatforms"></canvas></div></article></section>
        <section class="af-panel">
            <div class="af-panel-head">
                <div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-calendar-day"></i></span><div><h2>Cuentas por renovar</h2><p>Contacta al cliente con un mensaje adaptado a la fecha real de vencimiento.</p></div></div>
                <a href="gestionar_cuentas.php" class="af-btn af-btn-primary"><i class="fas fa-arrow-right"></i> Gestionar cuentas</a>
            </div>
            <div class="af-table-wrap">
                <table class="af-table">
                    <thead><tr><th>Cuenta</th><th>Plataforma</th><th>Cliente</th><th>Renovación</th><th>Estado</th><th class="af-text-center">WhatsApp</th></tr></thead>
                    <tbody>
                    <?php foreach($adminData['expiring_accounts'] as $row): $renewalData = dashboard_renewal_data($row); $phone = preg_replace('/\D+/', '', (string) ($row['telefono'] ?? '')); ?>
                        <tr>
                            <td><span class="af-row-title"><?= htmlspecialchars((string)$row['correo']) ?></span></td>
                            <td><?= htmlspecialchars((string)$row['plataforma']) ?></td>
                            <td><span class="af-row-title"><?= htmlspecialchars((string)($row['cliente']??'Sin asignar')) ?></span><?php if($phone!==''): ?><span class="af-row-sub">+<?= htmlspecialchars($phone) ?></span><?php endif; ?></td>
                            <td><?= date('d/m/Y',strtotime((string)$row['fecha_renovacion'])) ?></td>
                            <td><div class="af-status-stack"><span class="af-badge <?= htmlspecialchars($renewalData['badge']) ?>"><?= htmlspecialchars($renewalData['label']) ?></span><span class="af-status-detail"><?= htmlspecialchars($renewalData['detail']) ?></span></div></td>
                            <td><div class="af-actions af-actions-center"><?php if($phone!==''): ?><button type="button" class="af-btn af-whatsapp-btn af-btn-icon js-renewal-whatsapp" data-phone="<?= htmlspecialchars($phone, ENT_QUOTES) ?>" data-client="<?= htmlspecialchars((string)($row['cliente']??'Cliente'), ENT_QUOTES) ?>" data-message="<?= htmlspecialchars($renewalData['message'], ENT_QUOTES) ?>" title="Revisar, copiar o enviar el recordatorio por WhatsApp"><i class="fab fa-whatsapp"></i></button><?php else: ?><button type="button" class="af-btn af-whatsapp-btn af-btn-icon" disabled title="El cliente no tiene teléfono registrado"><i class="fab fa-whatsapp"></i></button><?php endif; ?></div></td>
                        </tr>
                    <?php endforeach; ?>
                    <?php if(!$adminData['expiring_accounts']): ?><tr><td colspan="6"><div class="af-empty"><i class="fas fa-circle-check"></i><strong>No hay cuentas próximas a vencer</strong></div></td></tr><?php endif; ?>
                    </tbody>
                </table>
            </div>
        </section>
        <section class="af-panel"><div class="af-panel-head"><div class="af-panel-title"><span class="af-panel-title-icon"><i class="fas fa-bolt"></i></span><div><h2>Accesos rápidos</h2><p><?= defined('AFENIXX_SUBSCRIPTION_LOCKED') && AFENIXX_SUBSCRIPTION_LOCKED ? 'Renueva tu suscripción para volver a administrar la operación.' : 'Abre los módulos de uso frecuente.' ?></p></div></div></div><div class="af-panel-body dashboard-quick-actions">
        <?php if (defined('AFENIXX_SUBSCRIPTION_LOCKED') && AFENIXX_SUBSCRIPTION_LOCKED): ?>
            <a href="mi_suscripcion.php" class="is-renewal"><span class="dash-icon"><i class="fas fa-wallet"></i></span>Renovar suscripción</a>
            <a href="mis_referidos.php"><span class="dash-icon"><i class="fas fa-gift"></i></span>Mis referidos</a>
            <a href="manual_de_uso.php"><span class="dash-icon"><i class="fas fa-book-open"></i></span>Manual</a>
            <span class="dashboard-locked-shortcut" title="Disponible después de renovar"><span class="dash-icon"><i class="fas fa-lock"></i></span>Buzones bloqueados</span>
            <span class="dashboard-locked-shortcut" title="Disponible después de renovar"><span class="dash-icon"><i class="fas fa-lock"></i></span>Dominios bloqueados</span>
            <span class="dashboard-locked-shortcut" title="Disponible después de renovar"><span class="dash-icon"><i class="fas fa-lock"></i></span>Cuentas bloqueadas</span>
        <?php else: ?>
            <a href="gestionar_buzones.php"><span class="dash-icon"><i class="fas fa-inbox"></i></span>Buzones</a><a href="gestionar_dominios.php"><span class="dash-icon"><i class="fas fa-at"></i></span>Dominios</a><a href="gestionar_clientes.php"><span class="dash-icon"><i class="fas fa-users"></i></span>Clientes</a><a href="gestionar_cuentas.php"><span class="dash-icon"><i class="fas fa-envelope"></i></span>Cuentas</a><a href="mis_referidos.php"><span class="dash-icon"><i class="fas fa-gift"></i></span>Referidos</a><a href="mis_reportes.php"><span class="dash-icon"><i class="fas fa-chart-line"></i></span>Reportes</a>
        <?php endif; ?>
        </div></section>
    <?php endif; ?>
</div>

<div id="myDataModal" class="af-modal-backdrop" aria-hidden="true">
    <section class="af-modal af-profile-modal" role="dialog" aria-modal="true" aria-labelledby="myDataModalTitle">
        <header class="af-modal-head">
            <div class="af-modal-title"><span class="af-modal-icon"><i class="fas fa-user-pen"></i></span><div><p class="af-eyebrow">CUENTA DEL ADMIN</p><h2 id="myDataModalTitle">Mis datos</h2><p>Actualiza la información utilizada para identificarte y recibir comunicaciones.</p></div></div>
            <button type="button" id="closeMyDataModalBtn" class="af-modal-close" aria-label="Cerrar"><i class="fas fa-xmark"></i></button>
        </header>
        <form id="myDataForm" autocomplete="off">
            <?= csrf_field() ?>
            <div class="af-modal-body">
                <div class="af-profile-summary"><span><i class="fas fa-circle-user"></i></span><div><strong><?= htmlspecialchars($userName) ?></strong><small><?= htmlspecialchars($userEmail) ?></small></div></div>
                <div class="af-form-grid af-profile-form-grid">
                    <div class="full"><label class="af-label" for="profileName"><i class="fas fa-user"></i> Nombre</label><input id="profileName" class="af-control" name="nombre_usuario" value="<?= htmlspecialchars($userName) ?>" autocomplete="name"><span class="af-help">Nombre que se mostrará dentro del panel.</span></div>
                    <div class="full"><label class="af-label" for="profilePhone"><i class="fab fa-whatsapp"></i> Teléfono</label><input id="profilePhone" class="af-control" name="telefono" value="<?= htmlspecialchars($userPhone) ?>" autocomplete="tel" placeholder="+51 999 999 999"><span class="af-help">Se utiliza para comunicaciones y solicitudes por WhatsApp.</span></div>
                    <div class="full"><label class="af-label" for="profilePassword"><i class="fas fa-lock"></i> Nueva contraseña <span class="af-optional">Opcional</span></label><input id="profilePassword" class="af-control" type="password" name="clave" autocomplete="new-password" placeholder="Déjala vacía para conservar la actual"><span class="af-help">Solo completa este campo cuando quieras cambiar la contraseña.</span></div>
                </div>
            </div>
            <footer class="af-modal-footer"><button id="cancelMyDataModalBtn" type="button" class="af-btn af-btn-secondary"><i class="fas fa-xmark"></i> Cancelar</button><button type="submit" class="af-btn af-btn-primary"><i class="fas fa-floppy-disk"></i> Actualizar datos</button></footer>
        </form>
    </section>
</div>

<?php if($role!=='Superadmin'): ?><div id="myPlanModal" class="af-modal-backdrop" aria-hidden="true">
    <section class="af-modal af-plan-modal" role="dialog" aria-modal="true" aria-labelledby="myPlanModalTitle">
        <header class="af-modal-head">
            <div class="af-modal-title"><span class="af-modal-icon"><i class="fas fa-gem"></i></span><div><p class="af-eyebrow">SUSCRIPCIÓN Y CAPACIDAD</p><h2 id="myPlanModalTitle">Mi plan</h2><p>Revisa tu plan actual, su vigencia y las opciones disponibles.</p></div></div>
            <button type="button" id="closeMyPlanModalBtn" class="af-modal-close" aria-label="Cerrar"><i class="fas fa-xmark"></i></button>
        </header>
        <div class="af-modal-body">
            <section class="af-current-plan-card">
                <div class="af-current-plan-main"><span class="af-current-plan-icon"><i class="fas fa-gem"></i></span><div><span>Plan actual</span><strong><?= htmlspecialchars($adminData['plan_name']) ?></strong><small><?= $adminData['end_date'] ? 'Vigente hasta ' . date('d/m/Y', strtotime((string)$adminData['end_date'])) : 'Sin fecha de vigencia registrada' ?></small></div></div>
                <span class="af-badge <?= in_array($adminData['state'], ['activa','prueba'], true) ? 'af-badge-success' : 'af-badge-warning' ?>"><?= htmlspecialchars(ucfirst((string)$adminData['state'])) ?></span>
            </section>
            <div class="af-plan-capacity-grid">
                <div><i class="fas fa-inbox"></i><span>Buzones</span><strong><?= number_format((int)$adminData['usage']['buzones']) ?> / <?= dashboard_limit($adminData['limits']['buzones']) ?></strong></div>
                <div><i class="fas fa-at"></i><span>Dominios</span><strong><?= number_format((int)$adminData['usage']['dominios']) ?> / <?= dashboard_limit($adminData['limits']['dominios']) ?></strong></div>
                <div><i class="fas fa-envelope"></i><span>Cuentas de streaming</span><strong><?= number_format((int)$adminData['usage']['cuentas']) ?> / <?= dashboard_limit($adminData['limits']['cuentas']) ?></strong></div>
                <div><i class="fas fa-users"></i><span>Clientes</span><strong><?= number_format((int)$adminData['usage']['clientes']) ?></strong></div>
            </div>
            <div class="af-plan-section-title"><div><h3>Planes disponibles</h3><p>Solicita información antes de cambiar tu suscripción.</p></div></div>
            <div class="af-plan-options">
                <?php foreach($planes_para_solicitud_admin as $plan): ?>
                    <article class="af-plan-option-card">
                        <div class="af-plan-option-head"><div><span>Plan disponible</span><h3><?= htmlspecialchars((string)$plan['nombre_plan']) ?></h3></div><i class="fas fa-layer-group"></i></div>
                        <?php $allowMonthly=(int)($plan['permite_mensual']??0)===1&&(float)($plan['precio_mensual']??0)>0; $allowAnnual=(int)($plan['permite_anual']??0)===1&&(float)($plan['precio_anual']??0)>0; ?>
                        <?php if(trim((string)($plan['descripcion']??''))!==''): ?><p class="af-plan-option-description"><?= htmlspecialchars((string)$plan['descripcion']) ?></p><?php endif; ?>
                        <div class="af-plan-price-row <?= ($allowMonthly xor $allowAnnual)?'is-single':'' ?>"><?php if($allowMonthly): ?><span><small>Mensual</small><strong><?= htmlspecialchars($currencySymbol) ?> <?= number_format((float)$plan['precio_mensual'],2) ?></strong></span><?php endif; ?><?php if($allowAnnual): ?><span><small>Anual</small><strong><?= htmlspecialchars($currencySymbol) ?> <?= number_format((float)$plan['precio_anual'],2) ?></strong></span><?php endif; ?></div>
                        <div class="af-plan-limit-list"><span><i class="fas fa-inbox"></i><?= dashboard_limit($plan['limite_buzones']) ?> buzones</span><span><i class="fas fa-at"></i><?= dashboard_limit($plan['limite_dominios']) ?> dominios</span><span><i class="fas fa-envelope"></i><?= dashboard_limit($plan['limite_cuentas']) ?> cuentas de streaming</span></div>
                        <button type="button" class="solicitar-plan-whatsapp-btn af-btn af-btn-success"
                            data-nombre-plan="<?= htmlspecialchars((string)$plan['nombre_plan'],ENT_QUOTES) ?>"
                            data-precio-mensual="<?= $allowMonthly?(float)$plan['precio_mensual']:0 ?>"
                            data-precio-anual="<?= $allowAnnual?(float)$plan['precio_anual']:0 ?>"
                            data-limite-buzones="<?= htmlspecialchars(dashboard_limit($plan['limite_buzones']), ENT_QUOTES) ?>"
                            data-limite-dominios="<?= htmlspecialchars(dashboard_limit($plan['limite_dominios']), ENT_QUOTES) ?>"
                            data-limite-cuentas="<?= htmlspecialchars(dashboard_limit($plan['limite_cuentas']), ENT_QUOTES) ?>"
                            data-phone="<?= htmlspecialchars(preg_replace('/\D+/', '', $superadmin_telefono), ENT_QUOTES) ?>"><i class="fab fa-whatsapp"></i> Consultar este plan</button>
                    </article>
                <?php endforeach; ?>
            </div>
        </div>
        <footer class="af-modal-footer"><button id="cancelMyPlanModalBtn" type="button" class="af-btn af-btn-secondary"><i class="fas fa-xmark"></i> Cerrar</button></footer>
    </section>
</div><?php endif; ?>

<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.3/dist/chart.umd.min.js"></script>
<script>
document.addEventListener('DOMContentLoaded',()=>{
 const escapePreviewHtml=(value)=>String(value??'').replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;').replace(/"/g,'&quot;').replace(/'/g,'&#039;');
 const formatWhatsAppPreview=(message)=>escapePreviewHtml(message).replace(/\*([^*\n]+)\*/g,'<strong>$1</strong>').replace(/\n/g,'<br>');
 const copyRenewalMessage=async(message)=>{
   if(navigator.clipboard?.writeText){await navigator.clipboard.writeText(message);return;}
   const area=document.createElement('textarea');area.value=message;area.style.position='fixed';area.style.opacity='0';document.body.appendChild(area);area.select();document.execCommand('copy');area.remove();
 };
 document.addEventListener('click',async(event)=>{
   const button=event.target.closest('.js-renewal-whatsapp');
   if(!button)return;
   const phone=(button.dataset.phone||'').replace(/\D+/g,'');
   const message=button.dataset.message||'';
   const client=button.dataset.client||'Cliente';
   if(!phone||!message)return;
   const result=await Swal.fire({
     title:'Recordatorio para '+client,
     html:`<div style="text-align:left"><p style="margin:0 0 12px;color:#64748b;font-size:13px">Revisa el mensaje antes de copiarlo o enviarlo.</p><div style="max-height:340px;overflow:auto;white-space:normal;background:#f8fafc;border:1px solid #e2e8f0;border-radius:12px;padding:16px;line-height:1.65;color:#1e293b">${formatWhatsAppPreview(message)}</div></div>`,
     icon:'info',
     showCancelButton:true,
     showDenyButton:true,
     confirmButtonText:'<i class="fab fa-whatsapp"></i> Enviar por WhatsApp',
     denyButtonText:'<i class="fas fa-copy"></i> Copiar mensaje',
     cancelButtonText:'Cancelar',
     confirmButtonColor:'#16a34a',
     denyButtonColor:'#475569',
     reverseButtons:true,
     width:620
   });
   if(result.isConfirmed){
     window.open(`https://wa.me/${phone}?text=${encodeURIComponent(message)}`,'_blank','noopener');
   }else if(result.isDenied){
     try{await copyRenewalMessage(message);await Swal.fire({icon:'success',title:'Mensaje copiado',text:'El recordatorio está listo para pegarse donde lo necesites.',timer:1800,showConfirmButton:false});}
     catch(error){await Swal.fire({icon:'error',title:'No se pudo copiar',text:'Selecciona el mensaje y cópialo manualmente.'});}
   }
 });
 document.querySelectorAll('.solicitar-plan-whatsapp-btn').forEach((button)=>{
   button.addEventListener('click',async(event)=>{
     event.preventDefault();
     event.stopPropagation();
     event.stopImmediatePropagation();
     const plan=button.dataset.nombrePlan||'Plan';
     const monthly=Number(button.dataset.precioMensual||0);
     const annual=Number(button.dataset.precioAnual||0);
     const phone=(button.dataset.phone||'').replace(/\D+/g,'');
     const currency=<?= json_encode($currencySymbol, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
     const adminName=<?= json_encode($userName, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
     const currentPlan=<?= json_encode((string)$adminData['plan_name'], JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
     const currentEnd=<?= json_encode($adminData['end_date'] ? date('d/m/Y', strtotime((string)$adminData['end_date'])) : 'Sin fecha registrada', JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
     const limits=`${button.dataset.limiteBuzones||'—'} buzones · ${button.dataset.limiteDominios||'—'} dominios · ${button.dataset.limiteCuentas||'—'} cuentas`;
     const priceLines=[];
     if(monthly>0)priceLines.push(`💳 *Precio mensual:* ${currency} ${monthly.toFixed(2)}`);
     if(annual>0)priceLines.push(`🗓️ *Precio anual:* ${currency} ${annual.toFixed(2)}`);
     const message=[
       '💎 *SOLICITUD DE INFORMACIÓN DE PLAN*',
       '',
       `Hola, soy *${adminName}*. Estoy evaluando el plan *${plan}* para ampliar mi operación en Ave Fénix.`,
       '',
       `🚀 *Plan de interés:* ${plan}`,
       ...priceLines,
       `📦 *Capacidad:* ${limits}`,
       '',
       `🔄 *Plan actual:* ${currentPlan}`,
       `📅 *Vigencia actual:* ${currentEnd}`,
       '',
       '✅ Deseo conocer los pasos para realizar el cambio, la forma de pago y desde qué fecha se habilitaría la nueva capacidad.',
       '',
       'Quedo atento(a). Gracias por la información. 🙌'
     ].join('\n');
     const result=await Swal.fire({
       title:`Consultar ${plan}`,
       html:`<div class="af-whatsapp-preview"><p>Elige si deseas copiar la solicitud o enviarla por WhatsApp.</p><div>${formatWhatsAppPreview(message)}</div></div>`,
       icon:'info',
       showCancelButton:true,
       showDenyButton:true,
       showConfirmButton:Boolean(phone),
       confirmButtonText:'<i class="fab fa-whatsapp"></i> Enviar por WhatsApp',
       denyButtonText:'<i class="fas fa-copy"></i> Copiar mensaje',
       cancelButtonText:'Cancelar',
       confirmButtonColor:'#16a34a',
       denyButtonColor:'#475569',
       reverseButtons:true,
       width:640,
       allowEscapeKey:true
     });
     if(result.isConfirmed&&phone){
       window.open(`https://wa.me/${phone}?text=${encodeURIComponent(message)}`,'_blank','noopener');
     }else if(result.isDenied){
       try{await copyRenewalMessage(message);await Swal.fire({icon:'success',title:'Solicitud copiada',text:'El mensaje está listo para enviarse.',timer:1700,showConfirmButton:false});}
       catch(error){await Swal.fire({icon:'error',title:'No se pudo copiar',text:'Selecciona el mensaje y cópialo manualmente.'});}
     }
   },true);
 });
 document.getElementById('openMyDataQuick')?.addEventListener('click',()=>{const modal=document.getElementById('myDataModal');modal.classList.remove('hidden');modal.classList.add('is-open');});
 document.getElementById('openMyPlanQuick')?.addEventListener('click',()=>{const modal=document.getElementById('myPlanModal');if(modal){modal.classList.remove('hidden');modal.classList.add('is-open');}});
 <?php if($role==='Superadmin'): ?>
 const rev=document.getElementById('dashboardRevenue');if(rev)new Chart(rev,{type:'line',data:{labels:<?= json_encode($superData['revenue_labels']) ?>,datasets:[{data:<?= json_encode($superData['revenue_values']) ?>,borderColor:'#dc2626',backgroundColor:'rgba(220,38,38,.10)',fill:true,tension:.35}]},options:{responsive:true,maintainAspectRatio:false,plugins:{legend:{display:false}},scales:{y:{beginAtZero:true},x:{grid:{display:false}}}}});
 const states=document.getElementById('dashboardStates');if(states)new Chart(states,{type:'doughnut',data:{labels:<?= json_encode($superData['state_labels']) ?>,datasets:[{data:<?= json_encode($superData['state_values']) ?>,backgroundColor:['#16a34a','#f59e0b','#dc2626','#64748b'],borderWidth:0}]},options:{responsive:true,maintainAspectRatio:false,cutout:'68%',plugins:{legend:{position:'bottom'}}}});
 <?php else: ?>
 const platforms=document.getElementById('dashboardPlatforms');if(platforms)new Chart(platforms,{type:'bar',data:{labels:<?= json_encode($adminData['platform_labels']) ?>,datasets:[{data:<?= json_encode($adminData['platform_values']) ?>,backgroundColor:'rgba(220,38,38,.82)',borderRadius:8}]},options:{responsive:true,maintainAspectRatio:false,indexAxis:'y',plugins:{legend:{display:false}},scales:{x:{beginAtZero:true,ticks:{precision:0}},y:{grid:{display:false}}}}});
 <?php endif; ?>
});
</script>
<?php require_once __DIR__ . '/admin_footer.php'; ?>
