<?php
/**
 * MP3 메타데이터 및 가사 자동 업데이트 스크립트 (Bugs 검색 기반)
 */

$isCli = (PHP_SAPI === 'cli');
if (!$isCli) {
    die("이 스크립트는 CLI 환경에서만 실행할 수 있습니다.");
}

require_once __DIR__ . '/config/config.php';
require_once __DIR__ . '/includes/db.php';
require_once __DIR__ . '/includes/functions.php';

// getID3 라이브러리 로드 확인
if (!initGetID3()) {
    die("Error: getID3 라이브러리를 초기화할 수 없습니다.\n");
}
// getID3 인스턴스 미리 한 번 생성해 에러 방지 및 write.php 로드
new getID3();

$targetDir = 'C:\Users\user\Downloads\[멜론] 1980-2019 가요 TOP10 [320Kbps]\[멜론] 1980-1999 가요 TOP10 [320Kbps]';
$winTargetDir = toWinPath($targetDir);

if (!is_dir($winTargetDir)) {
    die("Error: 대상 폴더를 찾을 수 없습니다. 경로: $targetDir\n");
}

echo "대상 폴더: $targetDir\n";
echo "스캔을 시작합니다...\n\n";

// 벅스 검색 및 가사 추출 테스트용 단일 함수
function fetchMetadataFromBugs($artist, $title) {
    $query = trim("$artist $title");
    $searchUrl = "https://music.bugs.co.kr/search/integrated?q=" . urlencode($query);
    
    $options = [
        'http' => [
            'header' => "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36\r\n"
        ]
    ];
    $context = stream_context_create($options);
    
    echo "  [웹 검색] Bugs에서 '$query' 검색 중...\n";
    $searchHtml = @file_get_contents($searchUrl, false, $context);
    if (!$searchHtml) {
        echo "  [경고] Bugs 검색 페이지 요청 실패.\n";
        return null;
    }
    
    // trackId 추출 (가장 첫 번째 매치되는 것)
    if (!preg_match('/trackId="(\d+)"/i', $searchHtml, $mTrack)) {
        // Alternative pattern
        if (!preg_match('/value="(\d+)" name="check"/i', $searchHtml, $mTrack)) {
            echo "  [경고] trackId를 찾을 수 없습니다.\n";
            return null;
        }
    }
    
    $trackId = $mTrack[1];
    echo "  [트랙 ID 획득] Track ID: $trackId\n";
    
    $trackUrl = "https://music.bugs.co.kr/track/" . $trackId;
    $trackHtml = @file_get_contents($trackUrl, false, $context);
    if (!$trackHtml) {
        echo "  [경고] Bugs 트랙 상세 페이지 요청 실패.\n";
        return null;
    }
    
    $metadata = [
        'track_id' => $trackId,
        'title' => null,
        'artist' => null,
        'album' => null,
        'year' => null,
        'lyrics' => null
    ];
    
    // 가사 추출 (<xmp> 태그 내)
    if (preg_match('/<div class="lyricsContainer">.*?<xmp>(.*?)<\/xmp>/is', $trackHtml, $mLyrics)) {
        $metadata['lyrics'] = trim($mLyrics[1]);
    } elseif (preg_match('/<xmp>(.*?)<\/xmp>/is', $trackHtml, $mLyrics)) {
        $metadata['lyrics'] = trim($mLyrics[1]);
    }
    
    // 앨범 제목 추출
    if (preg_match('/<meta property="sc:album_title" content="([^"]+)"/i', $trackHtml, $mAlbum)) {
        $metadata['album'] = html_entity_decode($mAlbum[1], ENT_QUOTES, 'UTF-8');
    }
    
    // 아티스트 이름 추출
    if (preg_match('/<meta property="sc:artist_nm" content="([^"]+)"/i', $trackHtml, $mArtist)) {
        $metadata['artist'] = html_entity_decode($mArtist[1], ENT_QUOTES, 'UTF-8');
    }
    
    // 곡 제목 추출
    if (preg_match('/<meta property="sc:track_title" content="([^"]+)"/i', $trackHtml, $mTitle)) {
        $metadata['title'] = html_entity_decode($mTitle[1], ENT_QUOTES, 'UTF-8');
    }
    
    // 발매 연도 추출 (페이지 안의 time datetime 태그에서 추출하거나 정규식으로)
    if (preg_match('/datetime="[^"]*">\s*(\d{4})/i', $trackHtml, $mYear)) {
        $metadata['year'] = $mYear[1];
    }
    
    return $metadata;
}

// 단일 파일 테스트
$testArtist = "김건모";
$testTitle = "잘못된 만남";
$meta = fetchMetadataFromBugs($testArtist, $testTitle);
print_r($meta);
