<?php
require_once dirname(__DIR__) . '/config/config.php';
require_once dirname(__DIR__) . '/includes/db.php';
require_once dirname(__DIR__) . '/includes/functions.php';
require_once dirname(__DIR__) . '/includes/auth.php';
require_once dirname(__DIR__) . '/includes/layout.php';
require_once dirname(__DIR__) . '/includes/functions_discovery.php';

requireAdmin();

$pdo = getDBConnection();
$limit = max(3, min(24, (int)($_GET['limit'] ?? 9)));
$allowRemote = (string)($_GET['remote'] ?? '1') !== '0';
$forceRefresh = (string)($_GET['refresh'] ?? '0') === '1';
$result = discoveryBuildAdminSuggestions($pdo, $limit, $allowRemote, $forceRefresh);
$candidates = $result['candidates'];
$profile = $result['profile'];
$sources = $result['sources'];
$cacheHit = !empty($result['cache_hit']);
$cacheUpdatedAt = (string)($result['cache_updated_at'] ?? '');
$cacheTime = $cacheUpdatedAt !== '' ? strtotime($cacheUpdatedAt) : false;
$cacheTimeLabel = $cacheTime ? date('Y-m-d H:i', $cacheTime) : '';

renderHeader('음악 발견 추천', 'discovery');
?>
<div class="admin-dashboard discovery-page">
    <div class="page-title-section">
        <h1 class="page-main-title">음악 발견 추천</h1>
        <p class="page-subtitle">API 키 없이 공개 메타데이터와 내 보관함을 비교해 추가해볼 만한 음악을 제안합니다. 음원 다운로드는 하지 않습니다.</p>
    </div>

    <section class="home-section discovery-hero">
        <div class="discovery-hero-copy">
            <span class="metadata-badge">키 없음 · 다운로드 없음</span>
            <h2>내가 직접 구한 음원을 스캔하기 전, 후보만 빠르게 확인합니다.</h2>
            <p>후보는 ListenBrainz 공개 통계, MusicBrainz 공개 메타데이터, 내장 큐레이션을 조합합니다. 최신 차트의 정확한 순위 데이터는 공식 API 키 없이는 보장하지 않습니다.</p>
        </div>
        <div class="discovery-toolbar" aria-label="음악 발견 작업">
            <a class="btn btn-primary" href="discovery.php?refresh=1&limit=<?php echo h((string)$limit); ?>&remote=<?php echo $allowRemote ? '1' : '0'; ?>">
                <i class="fa-solid fa-rotate"></i> 강제 새로 확인
            </a>
            <?php if ($allowRemote): ?>
                <a class="btn btn-secondary" href="discovery.php?remote=0&limit=<?php echo h((string)$limit); ?>">
                    <i class="fa-solid fa-wifi"></i> 내장 후보만 보기
                </a>
            <?php else: ?>
                <a class="btn btn-secondary" href="discovery.php?remote=1&limit=<?php echo h((string)$limit); ?>">
                    <i class="fa-solid fa-globe"></i> 공개 메타데이터 포함
                </a>
            <?php endif; ?>
            <?php if (hasPermission('music_scan')): ?>
                <a class="btn btn-secondary" href="scan.php">
                    <i class="fa-solid fa-magnifying-glass"></i> 스캔 실행
                </a>
            <?php endif; ?>
        </div>
    </section>

    <section class="discovery-summary-grid" aria-label="추천 기준 요약">
        <div class="stats-card">
            <span class="card-label">보관함 기준</span>
            <span class="card-value"><?php echo number_format((int)($profile['songs'] ?? 0)); ?>곡</span>
            <small><?php echo number_format((int)($profile['albums'] ?? 0)); ?>개 앨범 비교</small>
        </div>
        <div class="stats-card">
            <span class="card-label">활성 소스</span>
            <span class="card-value"><?php echo h($sources ? implode(', ', $sources) : '내장 후보'); ?></span>
            <small>
                <?php if ($cacheHit): ?>
                    공개 후보 캐시 사용<?php echo $cacheTimeLabel !== '' ? ' · ' . h($cacheTimeLabel) : ''; ?>
                <?php elseif ($allowRemote): ?>
                    공개 후보를 새로 확인함
                <?php else: ?>
                    원격 요청 없이 내장 후보만 표시
                <?php endif; ?>
            </small>
        </div>
        <div class="stats-card">
            <span class="card-label">제외 기준</span>
            <span class="card-value"><?php echo number_format((int)($result['existing_count'] ?? 0)); ?>개 키</span>
            <small>이미 보유한 아티스트+곡명 후보 제외</small>
        </div>
    </section>

    <section class="home-section discovery-profile-section">
        <div class="section-heading-row">
            <h2 class="section-title">내 보관함 취향 기준</h2>
            <span class="settings-muted">추천 후보를 고르는 보조 신호입니다.</span>
        </div>
        <div class="discovery-chip-list">
            <?php foreach (array_slice($profile['artists'] ?? [], 0, 6) as $artist): ?>
                <span class="discovery-chip"><i class="fa-solid fa-user"></i><?php echo h($artist['artist']); ?> · <?php echo number_format((int)$artist['song_count']); ?>곡</span>
            <?php endforeach; ?>
            <?php foreach (array_slice($profile['genres'] ?? [], 0, 6) as $genre): ?>
                <span class="discovery-chip discovery-chip-soft"><i class="fa-solid fa-tag"></i><?php echo h($genre['genre']); ?> · <?php echo number_format((int)$genre['song_count']); ?>곡</span>
            <?php endforeach; ?>
            <?php if (empty($profile['artists']) && empty($profile['genres'])): ?>
                <span class="settings-muted">아직 비교할 취향 데이터가 부족합니다. 음악을 스캔하고 재생 기록이 쌓이면 더 자연스러워집니다.</span>
            <?php endif; ?>
        </div>
    </section>

    <section class="home-section discovery-results-section">
        <div class="section-heading-row">
            <h2 class="section-title">추가 후보 <?php echo number_format(count($candidates)); ?>곡</h2>
            <span class="settings-muted">파일을 직접 구한 뒤 D드라이브 음악 폴더에 넣고 스캔하세요.</span>
        </div>

        <?php if (empty($candidates)): ?>
            <div class="empty-state-card">
                <i class="fa-solid fa-lightbulb"></i>
                <h3>표시할 후보가 없습니다.</h3>
                <p>공개 메타데이터 요청이 실패했거나 이미 보관함에 있는 곡이 많을 수 있습니다. 내장 후보만 보기 또는 새로 확인을 다시 시도하세요.</p>
            </div>
        <?php else: ?>
            <div class="discovery-grid">
                <?php foreach ($candidates as $candidate): ?>
                    <article class="discovery-card">
                        <div class="discovery-card-top">
                            <span class="metadata-badge"><?php echo h($candidate['source']); ?></span>
                            <?php if (!empty($candidate['year'])): ?><span class="settings-muted"><?php echo h($candidate['year']); ?></span><?php endif; ?>
                        </div>
                        <h3><?php echo h($candidate['title']); ?></h3>
                        <p class="discovery-artist"><?php echo h($candidate['artist']); ?></p>
                        <?php if (!empty($candidate['album'])): ?><p class="discovery-album"><?php echo h($candidate['album']); ?></p><?php endif; ?>
                        <p class="discovery-reason"><?php echo h($candidate['reason']); ?></p>
                        <div class="discovery-link-row">
                            <?php foreach ($candidate['search_links'] as $link): ?>
                                <a href="<?php echo h($link['url']); ?>" target="_blank" rel="noopener noreferrer" data-no-pjax="1">
                                    <?php echo h($link['label']); ?>
                                </a>
                            <?php endforeach; ?>
                        </div>
                    </article>
                <?php endforeach; ?>
            </div>
        <?php endif; ?>
    </section>

    <section class="home-section discovery-note-section">
        <h2 class="section-title">운영 기준</h2>
        <ul class="discovery-note-list">
            <li>이 화면은 추천과 검색 링크만 제공합니다. 음원 다운로드, 크롤링, 우회 수집 기능은 포함하지 않습니다.</li>
            <li>실제 음원 파일은 직접 준비한 뒤 기존 음악 폴더 스캔 기능으로 등록합니다.</li>
            <li>API 키 없이 최신 인기곡을 정확한 차트 순위로 제공하는 것은 제한적입니다. 정확도가 필요하면 추후 공식 API 연동으로 확장하는 방식이 안전합니다.</li>
        </ul>
    </section>
</div>
<?php renderFooter(); ?>
