<?php
// modules/facturacion/configuracion_facturacion.php
require_once __DIR__ . '/../../config/app.php';
require_once __DIR__ . '/../../includes/auth.php';
require_once __DIR__ . '/../../includes/functions.php';
require_once __DIR__ . '/../../includes/flash.php';
requireRol(ROL_FACTURACION);
$idInst = instId();
$user   = currentUser();
$db     = getDB();
$pageTitle = 'Configuración Facturación';

// Cargar config actual
$rows = $db->prepare("SELECT clave, valor FROM configuracion_institucional WHERE id_instituto = :id");
$rows->execute([':id' => $idInst]);
$cfg = array_column($rows->fetchAll(), 'valor', 'clave');

// ── POST: guardar ──
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $st = $db->prepare("
        INSERT INTO configuracion_institucional (id_instituto, clave, valor)
        VALUES (:inst, :clave, :valor)
        ON DUPLICATE KEY UPDATE valor = :valor2, updated_at = NOW()
    ");
    foreach (['email_facturacion', 'precio_titulacion', 'precio_practicas', 'precio_convalidacion', 'precio_vinculacion'] as $clave) {
        $valor = trim($_POST[$clave] ?? '');
        $st->execute([':inst'=>$idInst, ':clave'=>$clave, ':valor'=>$valor, ':valor2'=>$valor]);
    }
    // Capturar audit (sin romper si falla)
    try {
        $stPre2=$db->prepare("SELECT clave,valor FROM configuracion_institucional WHERE id_instituto=:i2 AND clave IN ('email_facturacion','precio_titulacion','precio_practicas','precio_convalidacion','precio_vinculacion')");
        $stPre2->execute([':i2'=>$idInst]);
        $cfgA=array_column($stPre2->fetchAll(),'valor','clave');
        $cfgD2=[];
        foreach(['email_facturacion','precio_titulacion','precio_practicas','precio_convalidacion','precio_vinculacion'] as $ck2) $cfgD2[$ck2]=trim($_POST[$ck2]??"");
        $db->prepare("INSERT INTO audit_log(id_usuario,id_instituto,accion,tabla_afectada,id_registro,datos_antes,datos_despues,ip_address,user_agent,created_at)VALUES(:u,:i,'editar_config_facturacion','configuracion_institucional',:r,:a,:d,:ip,:ua,NOW())")->execute([':u'=>$user['id'],':i'=>$idInst,':r'=>$idInst,':a'=>json_encode($cfgA,JSON_UNESCAPED_UNICODE),':d'=>json_encode($cfgD2,JSON_UNESCAPED_UNICODE),':ip'=>$_SERVER['REMOTE_ADDR']??"",':ua'=>substr($_SERVER['HTTP_USER_AGENT']??"",0,255)]);
    } catch(Exception $ex2){}
        registrarAudit($user['id'], 'editar_config_facturacion', 'configuracion_institucional', $idInst);
    flashSet('ok', 'Configuración guardada correctamente.');
    header('Location: configuracion_facturacion.php'); exit;
}

$emailFac     = $cfg['email_facturacion']    ?? 'facturacion@tecnopolis.edu.ec';
$precioTit    = $cfg['precio_titulacion']    ?? '2.00';
$precioPract  = $cfg['precio_practicas']     ?? '0.00';
$precioConv   = $cfg['precio_convalidacion'] ?? '0.00';
$precioVinc   = $cfg['precio_vinculacion']   ?? '0.00';
?>
<!DOCTYPE html>
<html lang="es">
<head>
<?php include __DIR__ . '/../../includes/head.php'; ?>
<link rel="stylesheet" href="<?= BASE_URL ?>/assets/css/sidebar-facturacion.css">
</head>
<body>
<?php include __DIR__ . '/../../includes/navbar.php'; ?>
<div class="app-shell">
  <!-- SIDEBAR -->
  <?php $sbActivo = 'configuracion'; include __DIR__ . '/../../includes/sidebar_facturacion.php'; ?>

  <main class="main-area">
    <?= flashHtml() ?>
    <div class="page-header">
      <h4><i class="fa fa-gear me-2" style="color:var(--accent);"></i>Configuración de Facturación</h4>
      <p>Define el correo y el precio del trámite de titulación para los estudiantes de tu institución.</p>
    </div>

    <form method="POST">
      <div class="tbl-wrap p-4 mb-4">

        <div style="background:var(--card-alt);border-radius:var(--r-lg);padding:20px;border-left:4px solid #059669;margin-bottom:20px;">
          <div style="font-size:12px;font-weight:700;color:#059669;margin-bottom:12px;">
            <i class="fa fa-envelope me-2"></i>Correo de Facturación
          </div>
          <div class="row g-3">
            <div class="col-md-8">
              <label class="form-label">Correo donde el estudiante enviará su comprobante</label>
              <input type="email" name="email_facturacion" class="form-control"
                     value="<?= htmlspecialchars($emailFac) ?>"
                     placeholder="facturacion@institución.edu.ec" required>
              <div class="form-text">Este correo aparece en el Paso 2 del módulo de Titulación del estudiante.</div>
            </div>
          </div>
        </div>

        <div style="background:var(--card-alt);border-radius:var(--r-lg);padding:20px;border-left:4px solid #2563eb;">
          <div style="font-size:12px;font-weight:700;color:#2563eb;margin-bottom:12px;">
            <i class="fa fa-dollar-sign me-2"></i>Precio del Trámite de Titulación
          </div>
          <div class="row g-3">
            <div class="col-md-4">
              <label class="form-label">Monto en USD <span class="text-danger">*</span></label>
              <div class="input-group">
                <span class="input-group-text">$</span>
                <input type="number" name="precio_titulacion" class="form-control"
                       value="<?= htmlspecialchars($precioTit) ?>"
                       min="0" step="0.01" placeholder="2.00" required>
                <span class="input-group-text">USD</span>
              </div>
              <div class="form-text">El estudiante verá este monto en el Paso 2 del proceso de titulación.</div>
            </div>
          </div>
        </div>

        <!-- PRACTICAS PROFESIONALES -->
        <div style="background:var(--card-alt);border-radius:var(--r-lg);padding:20px;border-left:4px solid #7c3aed;margin-top:16px;">
          <div style="font-size:12px;font-weight:700;color:#7c3aed;margin-bottom:12px;">
            <i class="fa fa-briefcase me-2"></i>Precio — Prácticas Profesionales
          </div>
          <div class="row g-3">
            <div class="col-md-4">
              <label class="form-label">Monto en USD</label>
              <div class="input-group">
                <span class="input-group-text">$</span>
                <input type="number" name="precio_practicas" class="form-control"
                       value="<?= htmlspecialchars($precioPract) ?>"
                       min="0" step="0.01" placeholder="0.00">
                <span class="input-group-text">USD</span>
              </div>
              <div class="form-text">Pon <strong>0.00</strong> si el trámite no tiene costo (igual el estudiante sube un PDF). Los exonerados también pagan $0.</div>
            </div>
          </div>
        </div>

        <!-- CONVALIDACION -->
        <div style="background:var(--card-alt);border-radius:var(--r-lg);padding:20px;border-left:4px solid #d97706;margin-top:16px;">
          <div style="font-size:12px;font-weight:700;color:#d97706;margin-bottom:12px;">
            <i class="fa fa-file-circle-check me-2"></i>Precio — Convalidación de Prácticas
          </div>
          <div class="row g-3">
            <div class="col-md-4">
              <label class="form-label">Monto en USD</label>
              <div class="input-group">
                <span class="input-group-text">$</span>
                <input type="number" name="precio_convalidacion" class="form-control"
                       value="<?= htmlspecialchars($precioConv) ?>"
                       min="0" step="0.01" placeholder="0.00">
                <span class="input-group-text">USD</span>
              </div>
              <div class="form-text">Costo del trámite de convalidación de prácticas preprofesionales.</div>
            </div>
          </div>
        </div>

        <!-- VINCULACION -->
        <div style="background:var(--card-alt);border-radius:var(--r-lg);padding:20px;border-left:4px solid #0891b2;margin-top:16px;">
          <div style="font-size:12px;font-weight:700;color:#0891b2;margin-bottom:12px;">
            <i class="fa fa-people-group me-2"></i>Precio — Vinculación con la Colectividad
          </div>
          <div class="row g-3">
            <div class="col-md-4">
              <label class="form-label">Monto en USD</label>
              <div class="input-group">
                <span class="input-group-text">$</span>
                <input type="number" name="precio_vinculacion" class="form-control"
                       value="<?= htmlspecialchars($precioVinc) ?>"
                       min="0" step="0.01" placeholder="0.00">
                <span class="input-group-text">USD</span>
              </div>
              <div class="form-text">Costo del trámite del proyecto de vinculación por grupo.</div>
            </div>
          </div>
        </div>

        <!-- PREVIEW en tiempo real -->
        <div style="background:#fffbeb;border:1px solid #fcd34d;border-radius:10px;padding:14px 18px;margin-top:20px;">
          <div style="font-size:11px;font-weight:700;color:#92400e;margin-bottom:8px;">
            <i class="fa fa-eye me-1"></i> Vista previa — cómo lo verá el estudiante:
          </div>
          <div style="font-size:13px;color:#78350f;line-height:1.7;">
            Realiza el depósito de <strong>$<span id="prev-precio"><?= htmlspecialchars($precioTit) ?></span></strong>
            a las cuentas del Instituto y adjunta el comprobante aquí.
            Luego envíalo a <strong><span id="prev-email"><?= htmlspecialchars($emailFac) ?></span></strong>.
          </div>
        </div>

      </div>

      <div class="d-flex gap-2">
        <button type="submit" class="btn btn-primary">
          <i class="fa fa-save me-2"></i>Guardar configuración
        </button>
        <a href="dashboard.php" class="btn btn-outline-secondary">Cancelar</a>
      </div>
    </form>

    <!-- ══ HISTORIAL DE CAMBIOS ══ -->
    <?php
    $hOk = false;
    $historial = [];
    $hTotal = 0;
    $hTotalPags = 1;
    $hPag   = max(1,(int)($_GET['hpag']??1));
    $hDesde = trim($_GET['hdesde']??'');
    $hHasta = trim($_GET['hhasta']??'');
    $hPerN  = (int)($_GET['hper']??25);
    $hPer   = in_array($hPerN,[25,50,100,200])?$hPerN:25;
    try {
        $hWhere = "WHERE al.accion='editar_config_facturacion' AND al.id_instituto=:inst";
        $hPrm   = [':inst'=>$idInst];
        if($hDesde!==''){$hWhere.=" AND DATE(al.created_at)>=:desde";$hPrm[':desde']=$hDesde;}
        if($hHasta!==''){$hWhere.=" AND DATE(al.created_at)<=:hasta";$hPrm[':hasta']=$hHasta;}
        $stC=$db->prepare("SELECT COUNT(*) FROM audit_log al ".$hWhere);
        $stC->execute($hPrm);
        $hTotal=(int)$stC->fetchColumn();
        $hTotalPags=max(1,(int)ceil($hTotal/$hPer));
        $hPag=min($hPag,$hTotalPags);
        $hOff=($hPag-1)*$hPer;
        $stH=$db->prepare("SELECT al.datos_antes,al.datos_despues,al.created_at,CONCAT(u.nombres,' ',u.apellidos) AS unom,u.email AS umail FROM audit_log al LEFT JOIN usuarios u ON u.id_usuario=al.id_usuario ".$hWhere." ORDER BY al.created_at DESC LIMIT ".$hPer." OFFSET ".$hOff);
        $stH->execute($hPrm);
        $historial=$stH->fetchAll();
        $hOk=true;
    } catch(Exception $ex){ $hOk=false; }
    $hLABELS=['email_facturacion'=>'Correo facturación','precio_titulacion'=>'Precio titulación','precio_practicas'=>'Precio prácticas','precio_convalidacion'=>'Precio convalidación','precio_vinculacion'=>'Precio vinculación'];
    ?>
    <div class="tbl-wrap p-4 mt-4">
      <div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:16px;">
        <div>
          <h5 style="margin:0;font-size:15px;font-weight:700;color:#0f172a;">
            <i class="fa fa-clock-rotate-left me-2" style="color:#7c3aed;"></i>Historial de cambios de precios
          </h5>
          <p style="margin:3px 0 0;font-size:12px;color:#64748b;">Registro de modificaciones a la configuración</p>
        </div>
        <span style="font-size:12px;color:#94a3b8;background:#f8fafc;border:1px solid #e2e8f0;border-radius:6px;padding:4px 12px;font-family:monospace;">
          <?= $hTotal ?> registro(s) · pág. <?= $hPag ?>/<?= $hTotalPags ?>
        </span>
      </div>

      <form method="GET" style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:16px;margin-bottom:20px;">
        <div style="display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;">
          <div style="display:flex;flex-direction:column;gap:4px;">
            <label style="font-size:11px;font-weight:600;color:#64748b;"><i class="fa fa-calendar-day me-1"></i>Desde</label>
            <input type="date" name="hdesde" value="<?= htmlspecialchars($hDesde) ?>" style="border:1px solid #cbd5e1;border-radius:7px;padding:8px 11px;font-size:13px;background:#fff;outline:none;min-width:150px;">
          </div>
          <div style="display:flex;flex-direction:column;gap:4px;">
            <label style="font-size:11px;font-weight:600;color:#64748b;"><i class="fa fa-calendar-check me-1"></i>Hasta</label>
            <input type="date" name="hhasta" value="<?= htmlspecialchars($hHasta) ?>" style="border:1px solid #cbd5e1;border-radius:7px;padding:8px 11px;font-size:13px;background:#fff;outline:none;min-width:150px;">
          </div>
          <div style="display:flex;flex-direction:column;gap:4px;">
            <label style="font-size:11px;font-weight:600;color:#64748b;"><i class="fa fa-list-ol me-1"></i>Por página</label>
            <select name="hper" style="border:1px solid #cbd5e1;border-radius:7px;padding:8px 11px;font-size:13px;background:#fff;outline:none;min-width:130px;">
              <?php foreach([25,50,100,200] as $op): ?>
                <option value="<?= $op ?>" <?= $hPer===$op?'selected':'' ?>><?= $op ?> registros</option>
              <?php endforeach; ?>
            </select>
          </div>
          <div style="display:flex;gap:8px;align-items:flex-end;">
            <button type="submit" style="background:#7c3aed;color:#fff;border:none;border-radius:7px;padding:9px 20px;font-size:13px;font-weight:700;cursor:pointer;"><i class="fa fa-search me-1"></i>Buscar</button>
            <?php if($hDesde!==''||$hHasta!==''||$hPer!==25): ?>
            <a href="configuracion_facturacion.php" style="background:#fff;color:#475569;border:1px solid #e2e8f0;border-radius:7px;padding:9px 16px;font-size:13px;text-decoration:none;"><i class="fa fa-xmark me-1"></i>Limpiar</a>
            <?php endif; ?>
          </div>
        </div>
        <?php if($hDesde!==''||$hHasta!==''): ?>
        <div style="margin-top:10px;display:flex;gap:8px;align-items:center;">
          <span style="font-size:11px;font-weight:700;color:#7c3aed;"><i class="fa fa-filter me-1"></i>Filtro activo:</span>
          <?php if($hDesde!==''): ?><span style="background:#ede9fe;color:#5b21b6;border-radius:5px;padding:2px 10px;font-size:12px;">Desde <?= date('d/m/Y',strtotime($hDesde)) ?></span><?php endif; ?>
          <?php if($hHasta!==''): ?><span style="background:#ede9fe;color:#5b21b6;border-radius:5px;padding:2px 10px;font-size:12px;">Hasta <?= date('d/m/Y',strtotime($hHasta)) ?></span><?php endif; ?>
          <span style="font-size:12px;color:#64748b;"><?= $hTotal ?> resultado(s)</span>
        </div>
        <?php endif; ?>
      </form>

      <?php if(!$hOk): ?>
        <div style="background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:12px 16px;font-size:13px;color:#991b1b;">
          <i class="fa fa-triangle-exclamation me-2"></i>El historial estará disponible una vez que guardes la configuración por primera vez.
        </div>
      <?php elseif(empty($historial)): ?>
        <div style="text-align:center;padding:3rem 1rem;color:#94a3b8;">
          <i class="fa fa-inbox" style="font-size:2.5rem;display:block;margin-bottom:.6rem;"></i>
          <div style="font-weight:600;"><?= ($hDesde!==''||$hHasta!=='')?'Sin registros en ese rango.':'Aún no hay cambios registrados.' ?></div>
        </div>
      <?php else: ?>
        <div style="display:flex;flex-direction:column;gap:10px;margin-bottom:20px;">
        <?php foreach($historial as $h):
          $dA=json_decode($h['datos_antes']?? '{}',true); if(!is_array($dA))$dA=[];
          $dD=json_decode($h['datos_despues']??'{}',true); if(!is_array($dD))$dD=[];
          $diffs=[];
          foreach($dD as $k=>$vD){ $vA=isset($dA[$k])?$dA[$k]:null; if($vA!==$vD)$diffs[$k]=['antes'=>$vA,'despues'=>$vD]; }
        ?>
        <div style="background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:14px 18px;box-shadow:0 1px 3px rgba(0,0,0,.04);">
          <div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin-bottom:10px;">
            <div style="display:flex;align-items:center;gap:10px;">
              <div style="width:36px;height:36px;border-radius:50%;background:linear-gradient(135deg,#7c3aed,#2563eb);display:flex;align-items:center;justify-content:center;">
                <i class="fa fa-user" style="color:#fff;font-size:13px;"></i>
              </div>
              <div>
                <div style="font-size:13px;font-weight:700;color:#0f172a;"><?= htmlspecialchars($h['unom']??'Sistema') ?></div>
                <div style="font-size:11px;color:#94a3b8;"><?= htmlspecialchars($h['umail']??'') ?></div>
              </div>
            </div>
            <div style="text-align:right;">
              <div style="font-size:12px;font-weight:600;color:#334155;"><i class="fa fa-calendar me-1" style="color:#7c3aed;"></i><?= date('d/m/Y',strtotime($h['created_at'])) ?></div>
              <div style="font-size:11px;color:#94a3b8;font-family:monospace;"><i class="fa fa-clock me-1"></i><?= date('H:i:s',strtotime($h['created_at'])) ?></div>
            </div>
          </div>
          <?php if(empty($diffs)): ?>
            <div style="font-size:12px;color:#94a3b8;font-style:italic;">Sin cambios en este registro.</div>
          <?php else: ?>
            <div style="display:flex;flex-direction:column;gap:6px;">
            <?php foreach($diffs as $campo=>$val):
              $lbl=isset($hLABELS[$campo])?$hLABELS[$campo]:$campo;
              $esP=(strpos($campo,'precio')!==false);
            ?>
              <div style="background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:8px 12px;display:flex;align-items:center;gap:10px;flex-wrap:wrap;">
                <span style="font-size:12px;font-weight:700;color:#475569;min-width:200px;"><?= htmlspecialchars($lbl) ?></span>
                <span style="background:#fef2f2;border:1px solid #fecaca;border-radius:5px;padding:3px 10px;font-size:12px;color:#991b1b;font-family:monospace;"><?= $esP?'$':'' ?><?= htmlspecialchars($val['antes']!==null?$val['antes']:'—') ?></span>
                <i class="fa fa-arrow-right" style="color:#cbd5e1;font-size:11px;"></i>
                <span style="background:#f0fdf4;border:1px solid #bbf7d0;border-radius:5px;padding:3px 10px;font-size:12px;color:#065f46;font-family:monospace;font-weight:700;"><?= $esP?'$':'' ?><?= htmlspecialchars($val['despues']) ?></span>
              </div>
            <?php endforeach; ?>
            </div>
          <?php endif; ?>
        </div>
        <?php endforeach; ?>
        </div>

        <?php if($hTotalPags>1):
          $qP=[];
          if($hDesde!=='')$qP['hdesde']=$hDesde;
          if($hHasta!=='')$qP['hhasta']=$hHasta;
          if($hPer!==25)  $qP['hper']=$hPer;
          $qS=count($qP)?'&'.http_build_query($qP):'';
          $bN='display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:34px;padding:0 10px;border-radius:7px;font-size:13px;text-decoration:none;font-weight:600;background:#fff;color:#475569;border:1px solid #e2e8f0;';
          $bA='display:inline-flex;align-items:center;justify-content:center;min-width:34px;height:34px;padding:0 10px;border-radius:7px;font-size:13px;text-decoration:none;font-weight:600;background:#7c3aed;color:#fff;border:1px solid #7c3aed;pointer-events:none;';
        ?>
        <div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:10px;border-top:1px solid #f1f5f9;padding-top:16px;">
          <div style="font-size:12px;color:#64748b;">Mostrando <strong><?= min($hOff+1,$hTotal) ?>–<?= min($hOff+$hPer,$hTotal) ?></strong> de <strong><?= $hTotal ?></strong></div>
          <div style="display:flex;gap:4px;flex-wrap:wrap;align-items:center;">
            <?php if($hPag>1): ?>
              <a href="?hpag=1<?= $qS ?>" style="<?= $bN ?>" title="Primera"><i class="fa fa-angles-left"></i></a>
              <a href="?hpag=<?= $hPag-1 ?><?= $qS ?>" style="<?= $bN ?>" title="Anterior"><i class="fa fa-angle-left"></i></a>
            <?php endif; ?>
            <?php
            $pS=max(1,$hPag-2);$pE=min($hTotalPags,$hPag+2);
            if($pS>1)echo '<span style="line-height:34px;padding:0 4px;color:#94a3b8;">...</span>';
            for($p=$pS;$p<=$pE;$p++){echo '<a href="?hpag='.$p.$qS.'" style="'.($p===$hPag?$bA:$bN).'">'.$p.'</a>';}
            if($pE<$hTotalPags)echo '<span style="line-height:34px;padding:0 4px;color:#94a3b8;">...</span>';
            ?>
            <?php if($hPag<$hTotalPags): ?>
              <a href="?hpag=<?= $hPag+1 ?><?= $qS ?>" style="<?= $bN ?>" title="Siguiente"><i class="fa fa-angle-right"></i></a>
              <a href="?hpag=<?= $hTotalPags ?><?= $qS ?>" style="<?= $bN ?>" title="Última"><i class="fa fa-angles-right"></i></a>
            <?php endif; ?>
          </div>
        </div>
        <?php endif; ?>
      <?php endif; ?>
    </div>

  </main>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.3/js/bootstrap.bundle.min.js"></script>
<script>
document.querySelector('[name="precio_titulacion"]').addEventListener('input', function(){
  document.getElementById('prev-precio').textContent = parseFloat(this.value || 0).toFixed(2);
});
document.querySelector('[name="email_facturacion"]').addEventListener('input', function(){
  document.getElementById('prev-email').textContent = this.value || 'sin correo';
});
</script>
</body>
</html>