<?php

declare(strict_types=1);
require __DIR__ . '/app/bootstrap.php';

$members = db()->query("SELECT * FROM users WHERE status = 'active' AND role = 'user' ORDER BY created_at DESC")->fetchAll();
$profilesByUser = [];
if ($members) {
    $ids = array_map(static fn(array $member): int => (int) $member['id'], $members);
    $placeholders = implode(',', array_fill(0, count($ids), '?'));
    $stmt = db()->prepare("SELECT pv.user_id, pf.field_key, pv.value_text FROM profile_values pv JOIN profile_fields pf ON pf.id = pv.field_id WHERE pv.user_id IN ({$placeholders}) AND pf.is_active = 1 AND pf.is_public = 1");
    $stmt->execute($ids);
    foreach ($stmt->fetchAll() as $value) {
        $profilesByUser[(int) $value['user_id']][(string) $value['field_key']] = (string) $value['value_text'];
    }
}

$newMemberThreshold = time() - (30 * 86400);
$heroMember = null;
foreach ($members as &$member) {
    $profile = $profilesByUser[(int) $member['id']] ?? [];
    $decodedHobbies = json_decode($profile['hobbies'] ?? '[]', true);
    $hobbies = is_array($decodedHobbies)
        ? array_values(array_filter(array_map(
            static fn(mixed $hobby): string => trim((string) $hobby),
            $decodedHobbies
        ), static fn(string $hobby): bool => $hobby !== ''))
        : [];

    $member['profile'] = $profile;
    $member['hobbies'] = array_slice($hobbies, 0, 2);
    $member['age'] = trim((string) ($profile['age'] ?? ''));
    $member['city'] = trim((string) ($profile['city'] ?? ''));
    $member['height'] = trim((string) ($profile['height'] ?? ''));
    $member['has_photo'] = trim((string) ($member['avatar'] ?? '')) !== '';
    $member['is_complete'] = $member['has_photo']
        && trim((string) ($member['bio'] ?? '')) !== ''
        && $member['age'] !== ''
        && $member['city'] !== '';
    $createdAt = strtotime((string) ($member['created_at'] ?? ''));
    $member['is_new'] = $createdAt !== false && $createdAt >= $newMemberThreshold;
    $member['search_text'] = mb_strtolower(implode(' ', array_filter(array_merge([
        (string) ($member['display_name'] ?? ''),
        $member['age'],
        $member['city'],
        $member['height'],
    ], $hobbies), static fn(string $value): bool => $value !== '')));

    if ($heroMember === null && $member['has_photo']) {
        $heroMember = $member;
    }
}
unset($member);

$site = site_settings();
$pageTitle = (string) $site['site_name'];
$pageDescription = (string) $site['site_description'];
$bodyClass = 'discover-page';
$activeNav = 'discover';

require __DIR__ . '/app/front-header.php';
?>

<section class="romance-hero romance-hero--with-photo" aria-labelledby="romance-hero-title">
    <img
        class="romance-hero__media"
        src="<?= e(url('assets/images/romance-hero.png')) ?>"
        alt=""
        aria-hidden="true"
        fetchpriority="high"
    >
    <div class="romance-hero__veil" aria-hidden="true"></div>
    <div class="front-container romance-hero__inner">
        <div class="romance-hero__content">
            <p class="romance-hero__eyebrow"><?= front_icon('sparkles') ?> 一次真诚的靠近</p>
            <h1 id="romance-hero-title"><?= e((string) $site['site_short_name']) ?></h1>
            <p class="romance-hero__lead"><?= e((string) $site['site_description']) ?></p>
            <?php if (trim((string) $site['site_notice']) !== ''): ?>
                <p class="romance-hero__notice"><?= front_icon('heart') ?><span><?= e((string) $site['site_notice']) ?></span></p>
            <?php endif; ?>
            <div class="romance-hero__actions">
                <a class="front-button front-button--primary" href="#member-discovery">
                    <?= front_icon('arrow-down') ?>
                    <span>开始遇见</span>
                </a>
            </div>
        </div>
        <?php if ($heroMember): ?>
            <a class="romance-hero__featured" href="<?= e(url('member.php?id=' . (int) $heroMember['id'])) ?>">
                <span>今日故事</span>
                <strong><?= e((string) $heroMember['display_name']) ?></strong>
                <?= front_icon('arrow-right') ?>
            </a>
        <?php endif; ?>
    </div>
</section>

<section id="member-discovery" class="member-discovery" aria-labelledby="member-discovery-title">
    <div class="front-container">
        <header class="section-heading">
            <div>
                <p class="section-heading__eyebrow">心动名册</p>
                <h2 id="member-discovery-title">遇见真实的人</h2>
                <p>慢一点认识，认真一点靠近。</p>
            </div>
            <p class="member-total" aria-live="polite"><strong data-member-count><?= count($members) ?></strong><span> 位会员</span></p>
        </header>

        <div class="member-toolbar" aria-label="查找会员">
            <label class="member-search">
                <span class="sr-only">搜索昵称、城市或爱好</span>
                <?= front_icon('search') ?>
                <input type="search" placeholder="搜索昵称、城市或爱好" autocomplete="off" data-member-search>
            </label>
            <div class="member-filters" role="group" aria-label="会员资料筛选">
                <button class="member-filter is-active" type="button" data-member-filter="all" aria-pressed="true">
                    <?= front_icon('grid') ?><span>全部</span>
                </button>
                <button class="member-filter" type="button" data-member-filter="photo" aria-pressed="false">
                    <?= front_icon('camera') ?><span>有照片</span>
                </button>
                <button class="member-filter" type="button" data-member-filter="complete" aria-pressed="false">
                    <?= front_icon('badge-check') ?><span>资料完整</span>
                </button>
            </div>
        </div>

        <div class="member-grid" data-member-grid>
            <?php foreach ($members as $member):
                $displayName = trim((string) ($member['display_name'] ?? '')) ?: '未命名会员';
                $initial = mb_substr($displayName, 0, 1) ?: '缘';
            ?>
                <article
                    class="member-card"
                    data-member-card
                    data-has-photo="<?= $member['has_photo'] ? '1' : '0' ?>"
                    data-complete="<?= $member['is_complete'] ? '1' : '0' ?>"
                    data-search="<?= e((string) $member['search_text']) ?>"
                >
                    <a class="member-card__link" href="<?= e(url('member.php?id=' . (int) $member['id'])) ?>" aria-label="查看 <?= e($displayName) ?> 的公开资料">
                        <div class="member-card__portrait">
                            <?php if ($member['has_photo']): ?>
                                <img src="<?= e(url((string) $member['avatar'])) ?>" alt="<?= e($displayName) ?>" loading="lazy">
                            <?php else: ?>
                                <span class="member-card__initial" aria-hidden="true"><?= e($initial) ?></span>
                            <?php endif; ?>
                            <?php if ($member['is_new']): ?><span class="member-card__new">新加入</span><?php endif; ?>
                        </div>
                        <div class="member-card__body">
                            <div class="member-card__heading">
                                <h3><?= e($displayName) ?></h3>
                                <?php if ($member['age'] !== ''): ?><span><?= e((string) $member['age']) ?> 岁</span><?php endif; ?>
                            </div>
                            <?php if ($member['city'] !== '' || $member['height'] !== ''): ?>
                                <p class="member-card__facts">
                                    <?php if ($member['city'] !== ''): ?><span><?= front_icon('map-pin') ?><?= e((string) $member['city']) ?></span><?php endif; ?>
                                    <?php if ($member['height'] !== ''): ?><span><?= front_icon('ruler') ?><?= e((string) $member['height']) ?> cm</span><?php endif; ?>
                                </p>
                            <?php endif; ?>
                            <?php if ($member['hobbies']): ?>
                                <ul class="member-card__interests" aria-label="爱好">
                                    <?php foreach ($member['hobbies'] as $hobby): ?><li><?= e((string) $hobby) ?></li><?php endforeach; ?>
                                </ul>
                            <?php endif; ?>
                            <span class="member-card__open" aria-hidden="true"><?= front_icon('arrow-right') ?></span>
                        </div>
                    </a>
                </article>
            <?php endforeach; ?>
        </div>

        <?php if (!$members): ?>
            <div class="discovery-empty discovery-empty--server">
                <span class="discovery-empty__icon" aria-hidden="true"><?= front_icon('heart') ?></span>
                <h3>还没有人写下第一份心意</h3>
                <p>这里会如实呈现已公开的会员资料，不会用虚构人物填满空白。</p>
            </div>
        <?php endif; ?>

        <div class="discovery-empty discovery-empty--filter" data-filter-empty hidden>
            <span class="discovery-empty__icon" aria-hidden="true"><?= front_icon('search') ?></span>
            <h3>这一刻还没有匹配的人</h3>
            <p>换一个关键词，或回到全部会员继续看看。</p>
            <button class="front-button front-button--secondary" type="button" data-clear-filters><?= front_icon('rotate-ccw') ?><span>清除筛选</span></button>
        </div>
    </div>
</section>

<?php require __DIR__ . '/app/front-footer.php'; ?>
