<?php
/**
 * Resuelve una URL o ruta web segura para la foto de perfil del usuario (si existe).
 * Se busca en el registro cifrado y en metadata (claves habituales).
 */

declare(strict_types=1);

/**
 * @param array|null $u Fila de usuario (AntaraStore) o null.
 * @return string|null Ruta relativa al sitio (p. ej. /media/…), URL http(s), o null.
 */
function antara_user_profile_image_rel(?array $u): ?string
{
    if (!$u || !is_array($u)) {
        return null;
    }
    $candidates = [];
    if (!empty($u['profileImageRel']) && is_string($u['profileImageRel'])) {
        $candidates[] = trim($u['profileImageRel']);
    }
    $meta = isset($u['metadata']) && is_array($u['metadata']) ? $u['metadata'] : [];
    foreach (['profileImageRel', 'profileImage', 'avatarUrl', 'photoRel', 'avatar', 'photo'] as $k) {
        if (!empty($meta[$k]) && is_string($meta[$k])) {
            $candidates[] = trim($meta[$k]);
        }
    }
    foreach ($candidates as $rel) {
        if ($rel === '') {
            continue;
        }
        if (stripos($rel, 'data:') === 0) {
            continue;
        }
        if (preg_match('#^https?://#i', $rel)) {
            return $rel;
        }
        if (strpos($rel, '..') !== false) {
            continue;
        }
        if ($rel[0] === '/') {
            return $rel;
        }
        if (preg_match('#^(media|assets|logos_sinapsys)/#i', $rel)) {
            return '/' . ltrim($rel, '/');
        }
    }

    return null;
}
