<?php
require_once __DIR__ . '/auth.php';
requireLogin();
$db = getDB();

// ── CREAR REFERIDO ────────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['_accion'] ?? '') === 'nuevo') {
    csrf_check();
    $cliente_id = intval($_POST['cliente_id'] ?? 0);
    $estado     = $_POST['estado'] ?? 'pendiente';
    $fecha_conf = ($estado === 'confirmado') ? date('Y-m-d') : null;
    if ($cliente_id) {
        $db->prepare("INSERT INTO referidos (cliente_id, empresa_referida, sector, estado, fecha_confirmacion) VALUES (?,?,?,?,?)")
           ->execute([$cliente_id, clean($_POST['empresa_referida'] ?? ''), $_POST['sector'] ?? '', $estado, $fecha_conf]);
    }
    header('Location: referidos.php'); exit;
}

// ── ELIMINAR ──────────────────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST' && ($_POST['_accion'] ?? '') === 'eliminar') {
    csrf_check();
    $db->prepare("DELETE FROM referidos WHERE id=?")->execute([intval($_POST['id'] ?? 0)]);
    header('Location: referidos.php'); exit;
}

// ── EDITAR / ACTUALIZAR ───────────────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    csrf_check();
    $id     = intval($_POST['id'] ?? 0);
    $estado = $_POST['estado'] ?? 'pendiente';
    if ($id && isset($_POST['_accion']) && $_POST['_accion'] === 'editar') {
        $fecha_conf = ($estado === 'confirmado' && !empty($_POST['fecha_confirmacion']))
                      ? $_POST['fecha_confirmacion']
                      : ($estado === 'confirmado' ? date('Y-m-d') : null);
        $db->prepare("UPDATE referidos SET empresa_referida=?,sector=?,estado=?,fecha_confirmacion=? WHERE id=?")
           ->execute([
               clean($_POST['empresa_referida'] ?? ''),
               $_POST['sector'] ?? '',
               $estado,
               $fecha_conf,
               $id,
           ]);
    } elseif ($id) {
        // Inline estado update
        $fecha_conf = ($estado === 'confirmado') ? date('Y-m-d') : null;
        $db->prepare("UPDATE referidos SET estado=?, fecha_confirmacion=COALESCE(fecha_confirmacion,?) WHERE id=?")
           ->execute([$estado, $fecha_conf, $id]);
    }
    header('Location: referidos.php'); exit;
}

// ── FORM EDITAR ───────────────────────────────────────────────────
$edit_id = intval($_GET['edit'] ?? 0);
$editing = null;
if ($edit_id) {
    $stmt = $db->prepare("SELECT r.*, c.empresa as cliente_empresa FROM referidos r JOIN clientes c ON r.cliente_id=c.id WHERE r.id=?");
    $stmt->execute([$edit_id]);
    $editing = $stmt->fetch();
}

$nuevo_ref = isset($_GET['nuevo']);
$page_title    = $editing ? 'Editar referido' : 'Programa de referidos';
$page_subtitle = $editing ? clean($editing['cliente_empresa']) : '3 referidos confirmados = 1 mes gratis';
ob_start(); ?>
<?php if(!$editing && !$nuevo_ref): ?>
<a href="referidos.php?nuevo=1" class="btn btn-primary"><i class="ti ti-plus"></i> Nuevo referido</a>
<?php endif; ?>
<?php $page_actions = ob_get_clean();
require_once 'layout.php';

$sectores    = ['hoteles' => '🏨 Hoteles', 'clinicas' => '🏥 Clínicas', 'inmobiliarias' => '🏢 Inmobiliarias', 'ecommerce' => '🛒 Ecommerce', 'servicios' => '⚙️ Servicios'];
$estado_badge = ['pendiente' => 'b-amber', 'contactado' => 'b-blue', 'confirmado' => 'b-green', 'perdido' => 'b-red'];
$plan_badge   = ['desafiante' => 'b-gray', 'confiado' => 'b-blue', 'dinamico' => 'b-purple'];
?>

<?php if ($nuevo_ref): ?>
<!-- FORM NUEVO REFERIDO -->
<?php
$clientes_lista = $db->query("SELECT id, empresa FROM clientes WHERE estado_pago='al_dia' ORDER BY empresa ASC")->fetchAll();
?>
<form method="POST" style="max-width:600px">
  <input type="hidden" name="_csrf" value="<?= csrf_token() ?>">
  <input type="hidden" name="_accion" value="nuevo">
  <div class="card" style="margin-bottom:12px">
    <div class="section-label" style="margin-top:0">Registrar nuevo referido</div>
    <div class="form-row">
      <div class="form-group">
        <label>Cliente referidor *</label>
        <select name="cliente_id" required>
          <option value="">— Seleccionar cliente —</option>
          <?php foreach($clientes_lista as $cl): ?>
          <option value="<?=$cl['id']?>"><?=clean($cl['empresa'])?></option>
          <?php endforeach; ?>
        </select>
      </div>
      <div class="form-group">
        <label>Empresa referida</label>
        <input type="text" name="empresa_referida" placeholder="Nombre del negocio referido">
      </div>
    </div>
    <div class="form-row">
      <div class="form-group">
        <label>Sector</label>
        <select name="sector">
          <option value="">— Sin especificar —</option>
          <?php foreach($sectores as $k => $v): ?>
          <option value="<?=$k?>"><?=$v?></option>
          <?php endforeach; ?>
        </select>
      </div>
      <div class="form-group">
        <label>Estado inicial</label>
        <select name="estado">
          <option value="pendiente">Pendiente</option>
          <option value="contactado">Contactado</option>
          <option value="confirmado">Confirmado ✓</option>
          <option value="perdido">Perdido</option>
        </select>
      </div>
    </div>
  </div>
  <div style="display:flex;gap:10px">
    <button type="submit" class="btn btn-primary"><i class="ti ti-check"></i> Guardar</button>
    <a href="referidos.php" class="btn">Cancelar</a>
  </div>
</form>

<?php elseif ($editing):
$r = $editing; ?>
<!-- FORM EDITAR REFERIDO -->
<form method="POST" style="max-width:600px">
  <input type="hidden" name="_csrf" value="<?= csrf_token() ?>">
  <input type="hidden" name="_accion" value="editar">
  <input type="hidden" name="id" value="<?=$r['id']?>">
  <div class="card" style="margin-bottom:12px">
    <div class="section-label" style="margin-top:0">Datos del referido</div>
    <div class="form-row">
      <div class="form-group">
        <label>Empresa referida</label>
        <input type="text" name="empresa_referida" value="<?=clean($r['empresa_referida'] ?? '')?>" placeholder="Nombre del negocio referido">
      </div>
      <div class="form-group">
        <label>Sector</label>
        <select name="sector">
          <option value="">— Sin especificar —</option>
          <?php foreach ($sectores as $k => $v): ?>
          <option value="<?=$k?>" <?=($r['sector'] ?? '') === $k ? 'selected' : ''?>><?=$v?></option>
          <?php endforeach; ?>
        </select>
      </div>
    </div>
    <div class="form-row">
      <div class="form-group">
        <label>Estado</label>
        <select name="estado">
          <option value="pendiente"  <?=$r['estado']==='pendiente' ?'selected':''?>>Pendiente</option>
          <option value="contactado" <?=$r['estado']==='contactado'?'selected':''?>>Contactado</option>
          <option value="confirmado" <?=$r['estado']==='confirmado'?'selected':''?>>Confirmado ✓</option>
          <option value="perdido"    <?=$r['estado']==='perdido'   ?'selected':''?>>Perdido</option>
        </select>
      </div>
      <div class="form-group">
        <label>Fecha de confirmación</label>
        <input type="date" name="fecha_confirmacion" value="<?=$r['fecha_confirmacion'] ?? ''?>">
      </div>
    </div>
  </div>
  <div style="display:flex;gap:10px;align-items:center">
    <button type="submit" class="btn btn-primary"><i class="ti ti-check"></i> Guardar</button>
    <a href="referidos.php" class="btn">Cancelar</a>
    <form method="POST" style="display:inline;margin-left:auto" onsubmit="return confirm('¿Eliminar este referido?')">
      <input type="hidden" name="_csrf" value="<?= csrf_token() ?>">
      <input type="hidden" name="_accion" value="eliminar">
      <input type="hidden" name="id" value="<?=$r['id']?>">
      <button type="submit" class="btn" style="color:#A32D2D"><i class="ti ti-trash"></i> Eliminar</button>
    </form>
  </div>
</form>

<?php else: ?>

<!-- VISTA LISTA -->
<div class="alert alert-success" style="margin-bottom:14px">
  <i class="ti ti-gift"></i>
  <strong>Mecánica:</strong> Por cada 3 clientes que un cliente refiera y activen AVI, recibe 1 mes gratis de su plan. Sin límite de acumulación.
</div>

<?php
$cnt_ref_total   = $db->query("SELECT COUNT(*) FROM referidos")->fetchColumn();
$cnt_confirmados = $db->query("SELECT COUNT(*) FROM referidos WHERE estado='confirmado'")->fetchColumn();
$cnt_pendientes  = $db->query("SELECT COUNT(*) FROM referidos WHERE estado='pendiente'")->fetchColumn();
$cnt_contactados = $db->query("SELECT COUNT(*) FROM referidos WHERE estado='contactado'")->fetchColumn();
$meses_generados = $db->query("SELECT COALESCE(SUM(FLOOR(total/3)),0) FROM (SELECT COUNT(*) as total FROM referidos WHERE estado='confirmado' GROUP BY cliente_id) t")->fetchColumn();
?>
<div class="metrics-grid" style="margin-bottom:14px">
  <div class="metric"><div class="metric-n"><?=$cnt_ref_total?></div><div class="metric-l">Total referidos</div></div>
  <div class="metric"><div class="metric-n amber"><?=$cnt_pendientes?></div><div class="metric-l">Pendientes</div></div>
  <div class="metric"><div class="metric-n"><?=$cnt_contactados?></div><div class="metric-l">Contactados</div></div>
  <div class="metric"><div class="metric-n green"><?=$cnt_confirmados?></div><div class="metric-l">Confirmados</div></div>
  <div class="metric"><div class="metric-n green"><?=$meses_generados?></div><div class="metric-l">Meses gratis generados</div></div>
</div>

<?php
$sin_referido = $db->query("
    SELECT c.id, c.empresa, c.plan, c.precio_mes, c.fecha_inicio,
           DATEDIFF(CURDATE(),c.fecha_inicio) as dias_activo,
           (SELECT COUNT(*) FROM referidos r WHERE r.cliente_id=c.id AND r.estado='confirmado') as confirmados
    FROM clientes c WHERE c.estado_pago='al_dia' ORDER BY dias_activo DESC
")->fetchAll();

$referidos = $db->query("
    SELECT r.*, c.empresa as cliente_empresa, c.plan, c.precio_mes,
           (SELECT COUNT(*) FROM referidos r2 WHERE r2.cliente_id=r.cliente_id AND r2.estado='confirmado') as total_confirmados
    FROM referidos r JOIN clientes c ON r.cliente_id=c.id ORDER BY r.created_at DESC
")->fetchAll();
?>

<div class="section-label">Estado por cliente</div>
<div class="table-wrap" style="margin-bottom:16px">
<table>
<thead><tr>
  <th style="width:24%">Cliente referidor</th>
  <th style="width:10%">Plan</th>
  <th style="width:12%">Días activo</th>
  <th style="width:22%">Progreso (confirmados)</th>
  <th style="width:14%">Meses ganados</th>
  <th style="width:18%">Próx. mes gratis en</th>
</tr></thead>
<tbody>
<?php foreach ($sin_referido as $c):
  $confirmados   = intval($c['confirmados']);
  $meses_ganados = floor($confirmados / 3);
  $faltan        = $confirmados % 3 === 0 && $confirmados > 0 ? 3 : 3 - ($confirmados % 3);
  $pct           = min(100, round(($confirmados % 3) / 3 * 100));
  $dias          = intval($c['dias_activo']);
  $dias_style    = $dias >= 14 && $confirmados === 0 ? 'color:#854F0B;font-weight:500' : '';
?>
<tr>
  <td><strong><?=clean($c['empresa'])?></strong></td>
  <td><span class="badge <?=$plan_badge[$c['plan']] ?? 'b-gray'?>"><?=ucfirst($c['plan'])?></span></td>
  <td style="<?=$dias_style?>"><?=$dias?> días<?php if ($dias >= 14 && $confirmados === 0): ?><br><span style="font-size:10px;color:#854F0B">⚡ Proponer referidos</span><?php endif; ?></td>
  <td>
    <div style="display:flex;align-items:center;gap:8px">
      <span style="font-size:12px;min-width:32px"><?=$confirmados?> / <?=($meses_ganados * 3 + 3)?></span>
      <div style="flex:1;height:5px;background:var(--off);border-radius:3px;overflow:hidden">
        <div style="height:100%;width:<?=$pct?>%;background:#1D9E75;border-radius:3px"></div>
      </div>
    </div>
  </td>
  <td style="font-weight:500;color:#0F6E56"><?=$meses_ganados?> mes<?=$meses_ganados !== 1 ? 'es' : ''?></td>
  <td style="color:var(--muted)">Faltan <?=$faltan?> referido<?=$faltan !== 1 ? 's' : ''?></td>
</tr>
<?php endforeach; ?>
<?php if (empty($sin_referido)): ?>
<tr><td colspan="6" style="text-align:center;padding:1.5rem;color:var(--muted)">Sin clientes activos aún</td></tr>
<?php endif; ?>
</tbody>
</table>
</div>

<div class="section-label">Historial de referidos</div>
<div class="table-wrap">
<table>
<thead><tr>
  <th style="width:22%">Cliente referidor</th>
  <th style="width:20%">Empresa referida</th>
  <th style="width:11%">Sector</th>
  <th style="width:12%">Estado</th>
  <th style="width:13%">Fecha confirm.</th>
  <th style="width:12%">Estado (edit)</th>
  <th style="width:10%">Acciones</th>
</tr></thead>
<tbody>
<?php foreach ($referidos as $r): ?>
<tr>
  <td>
    <strong><?=clean($r['cliente_empresa'])?></strong><br>
    <code style="font-size:10px;background:var(--off);padding:1px 5px;border-radius:4px">REF-<?=str_pad($r['cliente_id'], 3, '0', STR_PAD_LEFT)?></code>
  </td>
  <td><?=clean($r['empresa_referida'] ?? '—')?></td>
  <td style="font-size:12px"><?=ucfirst($r['sector'] ?? '—')?></td>
  <td><span class="badge <?=$estado_badge[$r['estado']] ?? 'b-gray'?>"><?=ucfirst($r['estado'])?></span></td>
  <td style="font-size:12px"><?=$r['fecha_confirmacion'] ? date('d/m/Y', strtotime($r['fecha_confirmacion'])) : '—'?></td>
  <td>
    <form method="POST" style="display:inline">
      <input type="hidden" name="_csrf" value="<?= csrf_token() ?>">
      <input type="hidden" name="id" value="<?=$r['id']?>">
      <select name="estado" onchange="this.form.submit()" style="font-size:11px;padding:3px 6px;border:0.5px solid var(--border2);border-radius:6px;background:#fff">
        <option value="pendiente"  <?=$r['estado']==='pendiente' ?'selected':''?>>Pendiente</option>
        <option value="contactado" <?=$r['estado']==='contactado'?'selected':''?>>Contactado</option>
        <option value="confirmado" <?=$r['estado']==='confirmado'?'selected':''?>>Confirmado</option>
        <option value="perdido"    <?=$r['estado']==='perdido'   ?'selected':''?>>Perdido</option>
      </select>
    </form>
  </td>
  <td style="display:flex;gap:4px">
    <a href="referidos.php?edit=<?=$r['id']?>" class="btn" style="font-size:11px;padding:3px 8px"><i class="ti ti-pencil"></i></a>
    <form method="POST" style="display:inline" onsubmit="return confirm('¿Eliminar este referido?')">
      <input type="hidden" name="_csrf" value="<?= csrf_token() ?>">
      <input type="hidden" name="_accion" value="eliminar">
      <input type="hidden" name="id" value="<?=$r['id']?>">
      <button type="submit" class="btn" style="font-size:11px;padding:3px 8px;color:#A32D2D"><i class="ti ti-trash"></i></button>
    </form>
  </td>
</tr>
<?php endforeach; ?>
<?php if (empty($referidos)): ?>
<tr><td colspan="7" style="text-align:center;padding:1.5rem;color:var(--muted)">Sin referidos registrados aún</td></tr>
<?php endif; ?>
</tbody>
</table>
</div>

<?php endif; ?>
<?php require_once 'layout_end.php'; ?>
