<?php
// includes/functions.php — helpers globales reutilizables
function badgeEstado(string $estado): string {
    $map = [
        'borrador'        => ['cls'=>'st-borrador',   'label'=>'Borrador'],
        'postulado'       => ['cls'=>'st-postulado',  'label'=>'Postulado'],
        'aprobado'        => ['cls'=>'st-aprobado',   'label'=>'Aprobado'],
        'rechazado'       => ['cls'=>'st-rechazado',  'label'=>'Rechazado'],
        'en_progreso'     => ['cls'=>'st-en_progreso','label'=>'En progreso'],
        'informe_enviado' => ['cls'=>'st-postulado',  'label'=>'Informe enviado'],
        'calificado'      => ['cls'=>'st-calificado', 'label'=>'Calificado'],
        'completado'      => ['cls'=>'st-completado', 'label'=>'Completado'],
        'validada'        => ['cls'=>'st-aprobado',   'label'=>'Validada'],
        'enviada'         => ['cls'=>'st-postulado',  'label'=>'Enviada'],
        'observada'       => ['cls'=>'st-calificado', 'label'=>'Observada'],
        'vigente'         => ['cls'=>'st-aprobado',   'label'=>'Vigente'],
        'vencido'         => ['cls'=>'st-calificado', 'label'=>'Vencido'],
    ];
    $d = $map[$estado] ?? ['cls'=>'st-borrador','label'=>htmlspecialchars($estado)];
    return "<span class=\"badge-estado {$d['cls']}\">{$d['label']}</span>";
}

function formatFecha(?string $fecha, string $fmt = 'd/m/Y'): string {
    if (!$fecha) return '—';
    try { return (new DateTime($fecha))->format($fmt); }
    catch (Exception) { return $fecha; }
}

function pct(int $cumplidas, int $requeridas): int {
    return $requeridas > 0 ? min(100, (int)round($cumplidas / $requeridas * 100)) : 0;
}

function jsonOk(array $data = []): void {
    header('Content-Type: application/json');
    echo json_encode(['ok' => true] + $data);
    exit;
}

function jsonErr(string $msg, int $code = 400): void {
    http_response_code($code);
    header('Content-Type: application/json');
    echo json_encode(['ok' => false, 'msg' => $msg]);
    exit;
}

function notificaciones(int $idUsuario): array {
    try {
        $db = getDB();
        $st = $db->prepare("SELECT id_notif, asunto, mensaje, leida, created_at
                            FROM notificaciones WHERE id_usuario=:u AND leida=0
                            ORDER BY created_at DESC LIMIT 10");
        $st->execute([':u' => $idUsuario]);
        return $st->fetchAll();
    } catch (Exception) { return []; }
}

// ── Configuración institucional ───────────────────────────────────
function getConfig(string $clave, string $default = ''): string {
    try {
        $db = getDB();
        $st = $db->prepare("SELECT valor FROM configuracion_institucional WHERE clave = :c LIMIT 1");
        $st->execute([':c' => $clave]);
        $r = $st->fetchColumn();
        return $r !== false ? $r : $default;
    } catch (Exception) { return $default; }
}

function getAllConfig(): array {
    try {
        $db = getDB();
        $rows = $db->query("SELECT clave, valor FROM configuracion_institucional")->fetchAll();
        return array_column($rows, 'valor', 'clave');
    } catch (Exception) { return []; }
}