<?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';
requirePermission('missing_files_manage');

$pdo = getDBConnection();
$message = isset($_GET['message']) ? trim((string)$_GET['message']) : '';
$status = isset($_GET['status']) ? trim((string)$_GET['status']) : 'success';

$stmt = $pdo->prepare("
    SELECT id, title, artist, album, genre, duration, extension, play_count, updated_at,
           metadata_updated_at, is_missing, folder_name, relative_path, missing_checked_at, is_hidden
    FROM songs
    WHERE is_missing = 1
    ORDER BY COALESCE(missing_checked_at, updated_at) DESC, id DESC
    LIMIT 300
");
$stmt->execute();
$songs = $stmt->fetchAll();

function missingFileNameForDisplay(array $song): string {
    $relativePath = trim((string)($song['relative_path'] ?? ''));
    if ($relativePath !== '') {
        $normalized = str_replace('\\', '/', $relativePath);
        $fileName = basename($normalized);
        if ($fileName !== '' && $fileName !== '.' && $fileName !== '/') {
            return $fileName;
        }
    }
    return '-';
}

function missingSongTitleForDisplay(array $song): string {
    $title = trim((string)($song['title'] ?? ''));
    if ($title !== '') {
        return $title;
    }
    $fileName = missingFileNameForDisplay($song);
    return $fileName !== '-' ? $fileName : '제목 없음';
}

function missingFolderNameForDisplay(array $song): string {
    $folderName = trim((string)($song['folder_name'] ?? ''));
    if ($folderName === '') {
        return '-';
    }
    $normalized = str_replace('\\', '/', $folderName);
    $safeName = basename($normalized);
    return $safeName !== '' && $safeName !== '.' && $safeName !== '/' ? $safeName : '-';
}

function missingCheckedAtForDisplay(array $song): string {
    return (string)($song['missing_checked_at'] ?: $song['metadata_updated_at'] ?: $song['updated_at'] ?: '-');
}

function renderMissingFileActions(array $song): void {
    ?>
    <div class="song-action-group missing-actions">
        <a class="btn btn-secondary btn-sm" href="../song_edit.php?id=<?php echo h($song['id']); ?>">정보 수정</a>
        <form action="missing_action.php" method="POST" class="inline-action-form" onsubmit="return confirm('파일 없음 상태를 해제할까요? 다음 스캔에서 실제 파일 존재 여부를 다시 확인합니다.');">
            <?php echo csrfInput(); ?>
            <input type="hidden" name="song_id" value="<?php echo h($song['id']); ?>">
            <button name="action" value="clear_missing" class="btn btn-secondary btn-sm">상태 해제</button>
        </form>
        <form action="missing_action.php" method="POST" class="inline-action-form" onsubmit="return confirm('이 곡을 일반 목록에서 숨길까요?');">
            <?php echo csrfInput(); ?>
            <input type="hidden" name="song_id" value="<?php echo h($song['id']); ?>">
            <button name="action" value="hide_song" class="btn btn-danger btn-sm">숨김</button>
        </form>
        <form action="missing_action.php" method="POST" class="inline-action-form" onsubmit="return confirm('이 파일 없음 곡을 DB에서 즉시 삭제할까요? 좋아요, 재생기록, 플레이리스트 연결도 함께 정리됩니다. 실제 음악 파일은 삭제하지 않습니다.');">
            <?php echo csrfInput(); ?>
            <input type="hidden" name="song_id" value="<?php echo h($song['id']); ?>">
            <button name="action" value="delete_missing" class="btn btn-danger btn-sm missing-delete-btn"><i class="fa-solid fa-trash-can"></i> 삭제</button>
        </form>
    </div>
    <?php
}

renderHeader('파일 없음 관리', 'missing_files');
?>
<div class="admin-dashboard missing-files-page">
    <div class="page-title-section">
        <h1 class="page-main-title">파일 없음 관리</h1>
        <p class="page-subtitle">DB에는 남아 있지만 실제 음악 파일을 찾을 수 없는 곡을 확인합니다. 실제 파일 경로는 표시하지 않습니다.</p>
    </div>

    <?php if ($message !== ''): ?>
        <div class="alert-box <?php echo $status === 'error' ? 'alert-danger' : 'alert-info'; ?>">
            <div class="alert-icon"><i class="fas fa-circle-info"></i></div>
            <div class="alert-content"><p><?php echo h($message); ?></p></div>
        </div>
    <?php endif; ?>

    <section class="settings-card missing-files-toolbar">
        <div class="section-heading-row">
            <h2 class="section-title">파일 없음 곡 <?php echo number_format(count($songs)); ?>개</h2>
            <a class="btn btn-secondary btn-sm" href="scan.php"><i class="fa-solid fa-rotate"></i> 관리자 스캔으로 이동</a>
        </div>
        <div class="toolbar-actions" style="display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px;">
            <form action="maintenance.php" method="POST" class="inline-action-form" onsubmit="return confirm('파일 없음 상태를 다시 계산할까요?');">
                <?php echo csrfInput(); ?>
                <button name="action" value="refresh_missing_files" class="btn btn-primary"><i class="fa-solid fa-file-circle-check"></i> 파일 없음 상태 재검사</button>
            </form>
            <?php if (!empty($songs)): ?>
                <form action="missing_action.php" method="POST" class="inline-action-form" onsubmit="return confirm('정말로 검색된 모든 파일 없음 곡을 DB에서 즉시 삭제할까요? 이 작업은 되돌릴 수 없으며 가사, 좋아요, 재생기록, 플레이리스트 연결도 함께 삭제됩니다. 실제 음악 파일은 삭제하지 않습니다.');">
                    <?php echo csrfInput(); ?>
                    <button name="action" value="delete_all_missing" class="btn btn-danger"><i class="fa-solid fa-trash-can"></i> 전체 누락 곡 삭제</button>
                </form>
            <?php endif; ?>
        </div>
        <p class="settings-muted">즉시 삭제는 DB의 곡 레코드와 가사, 좋아요, 재생기록, 플레이리스트 연결만 정리합니다. 실제 음악 파일은 삭제하지 않습니다.</p>
    </section>

    <?php if (empty($songs)): ?>
        <section class="home-section"><p class="empty-text">파일 없음 상태의 곡이 없습니다.</p></section>
    <?php else: ?>
        <div class="missing-table-container">
            <table class="data-table missing-files-table">
                <thead>
                    <tr>
                        <th>곡 정보</th>
                        <th>아티스트</th>
                        <th>앨범</th>
                        <th>파일명</th>
                        <th>장르 / 형식</th>
                        <th>확인일</th>
                        <th class="text-center">관리</th>
                    </tr>
                </thead>
                <tbody>
                    <?php foreach ($songs as $song): ?>
                        <?php
                        $displayTitle = missingSongTitleForDisplay($song);
                        $displayArtist = artistName($song['artist'] ?? '');
                        $displayAlbum = albumName($song['album'] ?? '');
                        $displayFileName = missingFileNameForDisplay($song);
                        ?>
                        <tr>
                            <td data-label="곡 정보">
                                <div class="missing-song-main">
                                    <strong class="missing-song-title" title="<?php echo h($displayTitle); ?>"><?php echo h($displayTitle); ?></strong>
                                    <small>#<?php echo h($song['id']); ?> · <?php echo h(formatDuration($song['duration'] ?? null)); ?> · 재생 <?php echo number_format((int)($song['play_count'] ?? 0)); ?>회</small>
                                    <?php if ((int)($song['is_hidden'] ?? 0) === 1): ?>
                                        <span class="status-badge muted">숨김 상태</span>
                                    <?php endif; ?>
                                </div>
                            </td>
                            <td data-label="아티스트" title="<?php echo h($displayArtist); ?>"><?php echo h($displayArtist); ?></td>
                            <td data-label="앨범" title="<?php echo h($displayAlbum); ?>"><?php echo h($displayAlbum); ?></td>
                            <td data-label="파일명" title="<?php echo h($displayFileName); ?>">
                                <span class="missing-file-name"><?php echo h($displayFileName); ?></span>
                                <small class="missing-folder-name">폴더: <?php echo h(missingFolderNameForDisplay($song)); ?></small>
                            </td>
                            <td data-label="장르 / 형식"><?php echo h(genreName($song['genre'] ?? '')); ?> · <?php echo h(strtoupper($song['extension'] ?? '-')); ?></td>
                            <td data-label="확인일"><?php echo h(missingCheckedAtForDisplay($song)); ?></td>
                            <td data-label="관리" class="text-center"><?php renderMissingFileActions($song); ?></td>
                        </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
        </div>

        <div class="missing-file-grid">
            <?php foreach ($songs as $song): ?>
                <article class="missing-file-card">
                    <?php if ((int)($song['is_hidden'] ?? 0) === 1): ?>
                        <span class="status-badge muted">숨김 상태</span>
                    <?php endif; ?>
                    <span class="status-badge-missing">파일 없음</span>
                    <strong><?php echo h(metaValue($song['title'], '제목 없음')); ?></strong>
                    <span class="missing-card-meta"><?php echo h(artistName($song['artist'])); ?> · <?php echo h(albumName($song['album'])); ?></span>
                    <small>장르: <?php echo h(genreName($song['genre'])); ?> · 형식: <?php echo h(strtoupper($song['extension'] ?? '-')); ?></small>
                    <small>폴더: <?php echo h(missingFolderNameForDisplay($song)); ?></small>
                    <small>확인: <?php echo h($song['missing_checked_at'] ?: $song['metadata_updated_at'] ?: $song['updated_at'] ?: '-'); ?></small>
                    <small>곡 ID: #<?php echo h($song['id']); ?> · 파일명: <?php echo h(missingFileNameForDisplay($song)); ?></small>
                    <div class="song-action-group">
                        <a class="btn btn-secondary btn-sm" href="../song_edit.php?id=<?php echo h($song['id']); ?>">정보 수정</a>
                        <form action="missing_action.php" method="POST" class="inline-action-form" onsubmit="return confirm('파일 없음 상태를 해제할까요? 다음 스캔에서 다시 확인됩니다.');">
                            <?php echo csrfInput(); ?>
                            <input type="hidden" name="song_id" value="<?php echo h($song['id']); ?>">
                            <button name="action" value="clear_missing" class="btn btn-secondary btn-sm">상태 해제</button>
                        </form>
                        <form action="missing_action.php" method="POST" class="inline-action-form" onsubmit="return confirm('이 곡을 일반 목록에서 숨길까요?');">
                            <?php echo csrfInput(); ?>
                            <input type="hidden" name="song_id" value="<?php echo h($song['id']); ?>">
                            <button name="action" value="hide_song" class="btn btn-danger btn-sm">숨김</button>
                        </form>
                        <form action="missing_action.php" method="POST" class="inline-action-form" onsubmit="return confirm('이 파일 없음 곡을 DB에서 즉시 삭제할까요? 가사, 좋아요, 재생기록, 플레이리스트 연결도 함께 정리됩니다. 실제 음악 파일은 삭제하지 않습니다.');">
                            <?php echo csrfInput(); ?>
                            <input type="hidden" name="song_id" value="<?php echo h($song['id']); ?>">
                            <button name="action" value="delete_missing" class="btn btn-danger btn-sm missing-delete-btn"><i class="fa-solid fa-trash-can"></i> 즉시 삭제</button>
                        </form>
                    </div>
                </article>
            <?php endforeach; ?>
        </div>
    <?php endif; ?>
</div>
<?php renderFooter(); ?>
