<?php
/**
 * YouTube Converter - Video Bilgisi ve Format Getirme API Uç Noktası
 */
require_once __DIR__ . '/../config.php';

header('Content-Type: application/json; charset=utf-8');

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['success' => false, 'message' => 'Geçersiz istek metodu. Sadece POST kabul edilir.']);
    exit;
}

$rawInput = file_get_contents('php://input');
$input = json_decode($rawInput, true) ?? $_POST;
$url = trim($input['url'] ?? '');

if (empty($url)) {
    echo json_encode(['success' => false, 'message' => 'Lütfen bir YouTube URL\'si girin.']);
    exit;
}

// YouTube URL Kontrolü
if (!filter_var($url, FILTER_VALIDATE_URL) || !preg_match('/(youtube\.com|youtu\.be)/i', $url)) {
    echo json_encode(['success' => false, 'message' => 'Lütfen geçerli bir YouTube URL adresi girin.']);
    exit;
}

// YouTube oEmbed API ile anında başlık, resim ve yazar bilgisi çekme (yt-dlp bekleme süresini SIFIRA indirir)
$oembedUrl = "https://www.youtube.com/oembed?url=" . urlencode($url) . "&format=json";

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $oembedUrl);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
$response = curl_exec($ch);
curl_close($ch);

$title = "YouTube Videosu";
$uploader = "Bilinmeyen Kanal";
$thumbnail = "";

if ($response) {
    $data = json_decode($response, true);
    if ($data) {
        $title = $data['title'] ?? $title;
        $uploader = $data['author_name'] ?? $uploader;
        $thumbnail = $data['thumbnail_url'] ?? '';
    }
} else {
    // Alternatif olarak video ID'sinden thumbnail oluştur
    preg_match('/(?:v=|youtu\.be\/|shorts\/)([^&]+)/', $url, $matches);
    if (isset($matches[1])) {
        $thumbnail = "https://i.ytimg.com/vi/" . $matches[1] . "/hqdefault.jpg";
    }
}

// Kaliteleri artık yt-dlp'den çekmek yerine STATİK olarak veriyoruz (Sunucu yorulmaz)
$videoQualities = [
    ['quality' => '720p', 'ext' => 'mp4', 'id' => '720p', 'name' => 'MP4 - 720p (HD Video)'],
    ['quality' => '480p', 'ext' => 'mp4', 'id' => '480p', 'name' => 'MP4 - 480p (SD Video)']
];

$audioQualities = [
    ['id' => 'mp3_320k', 'name' => 'MP3 (320 kbps - Yüksek Kalite)', 'ext' => 'mp3'],
    ['id' => 'mp3_192k', 'name' => 'MP3 (192 kbps - Standart Kalite)', 'ext' => 'mp3'],
    ['id' => 'm4a', 'name' => 'M4A (Orijinal Ses Kalitesi)', 'ext' => 'm4a']
];

// Süre bilgisini (duration) almak için YouTube HTML kaynağına hızlı bir istek atıyoruz
$durationFormatted = "Bilinmiyor";
$durationSeconds = 0;

$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, $url);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch2, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch2, CURLOPT_TIMEOUT, 5);
// YouTube'un bot olduğumuzu anlamaması için sahte bir tarayıcı (User-Agent) ekliyoruz
curl_setopt($ch2, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36');
$html = curl_exec($ch2);
curl_close($ch2);

if ($html && preg_match('/"lengthSeconds":"(\d+)"/', $html, $matches)) {
    $durationSeconds = (int)$matches[1];
    $hours = floor($durationSeconds / 3600);
    $minutes = floor(($durationSeconds / 60) % 60);
    $secs = $durationSeconds % 60;
    
    if ($hours > 0) {
        $durationFormatted = sprintf("%02d:%02d:%02d", $hours, $minutes, $secs);
    } else {
        $durationFormatted = sprintf("%02d:%02d", $minutes, $secs);
    }
}

echo json_encode([
    'success' => true,
    'title' => $title,
    'uploader' => $uploader,
    'duration' => $durationFormatted,
    'duration_seconds' => $durationSeconds,
    'thumbnail' => $thumbnail,
    'video_qualities' => $videoQualities,
    'audio_qualities' => $audioQualities
], JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
