document.addEventListener("DOMContentLoaded", () => {
    const urlForm = document.getElementById("urlForm");
    const urlInput = document.getElementById("urlInput");
    const submitBtn = document.getElementById("submitBtn");
    const submitBtnText = document.getElementById("submitBtnText");
    const submitSpinner = document.getElementById("submitSpinner");

    const videoPreview = document.getElementById("videoPreview");
    const thumbnail = document.getElementById("thumbnail");
    const videoTitle = document.getElementById("videoTitle");
    const videoUploader = document.getElementById("videoUploader");
    const videoDuration = document.getElementById("videoDuration");

    const formatSelect = document.getElementById("formatSelect");
    const convertBtn = document.getElementById("convertBtn");

    const progressContainer = document.getElementById("progressContainer");
    const progressBarFill = document.getElementById("progressBarFill");
    const statusText = document.getElementById("statusText");

    const resultBox = document.getElementById("resultBox");
    const downloadBtn = document.getElementById("downloadBtn");

    let currentVideoUrl = "";

    // 1. URL Gönderimi ve Video Bilgisi Getirme
    urlForm.addEventListener("submit", async (e) => {
        e.preventDefault();
        const url = urlInput.value.trim();

        if (!url) {
            alert("Lütfen geçerli bir YouTube video bağlantısı girin.");
            return;
        }

        // Reset UI
        currentVideoUrl = url;
        resetUI();
        setLoadingState(true, "Video Bilgileri Alınıyor...");

        try {
            const response = await fetch("api/info.php", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({ url: url })
            });
            
            // Eğer sunucudan 500, 403 gibi bir sayfa dönerse detaylı hata ver
            if (!response.ok) {
                throw new Error("HTTP Hatası: " + response.status);
            }

            const data = await response.json();

            if (!data.success) {
                alert(data.message || "Video bilgileri alınırken bir hata oluştu.");
                setLoadingState(false, "Dönüştür");
                return;
            }

            // Bilgileri Ekrana Yansıt
            thumbnail.src = data.thumbnail;
            videoTitle.textContent = data.title;
            videoUploader.textContent = data.uploader;
            videoDuration.textContent = data.duration;

            // Format Seçeneklerini Doldur
            formatSelect.innerHTML = "";

            // Video Kaliteleri Grubu
            if (data.video_qualities && data.video_qualities.length > 0) {
                const videoGroup = document.createElement("optgroup");
                videoGroup.label = "Video Formatları (MP4)";

                data.video_qualities.forEach(q => {
                    const opt = document.createElement("option");
                    opt.value = q.quality;
                    opt.textContent = `MP4 - ${q.quality} (HD Video)`;
                    videoGroup.appendChild(opt);
                });
                formatSelect.appendChild(videoGroup);
            }

            // Ses Kaliteleri Grubu
            if (data.audio_qualities && data.audio_qualities.length > 0) {
                const audioGroup = document.createElement("optgroup");
                audioGroup.label = "Ses Formatları (MP3 & M4A)";

                data.audio_qualities.forEach(a => {
                    const opt = document.createElement("option");
                    opt.value = a.id;
                    opt.textContent = a.name;
                    audioGroup.appendChild(opt);
                });
                formatSelect.appendChild(audioGroup);
            }

            // Önizleme Paneli Göster
            videoPreview.style.display = "block";
            setLoadingState(false, "Dönüştür");

        } catch (error) {
            console.error(error);
            alert("Sunucuyla bağlantı kurulurken bir hata oluştu: " + error.message);
            setLoadingState(false, "Dönüştür");
        }

    });

    // 2. Dönüştürme Başlatma
    convertBtn.addEventListener("click", async () => {
        const selectedFormat = formatSelect.value;

        convertBtn.disabled = true;
        resultBox.style.display = "none";
        progressContainer.style.display = "block";
        
        simulateProgress();

        try {
            const response = await fetch("api/convert_v2.php", {
                method: "POST",
                headers: { "Content-Type": "application/json" },
                body: JSON.stringify({
                    url: currentVideoUrl,
                    format: selectedFormat,
                    title: videoTitle.textContent
                })
            });

            let data;
            try {
                data = await response.json();
            } catch (e) {
                statusText.textContent = "Bağlantı hatası oluştu veya sunucu zaman aşımına uğradı.";
                convertBtn.disabled = false;
                return;
            }

            if (!data.success) {
                statusText.textContent = "Dönüştürme başarısız: " + (data.message || "Hata oluştu.");
                convertBtn.disabled = false;
                return;
            }

            // Tamamlandı
            progressBarFill.style.width = "100%";
            statusText.textContent = "Dönüştürme Tamamlandı!";
            
            setTimeout(() => {
                downloadBtn.href = data.download_url;
                resultBox.style.display = "block";
                convertBtn.disabled = false;
            }, 600);

        } catch (error) {
            console.error(error);
            statusText.textContent = "Bağlantı hatası oluştu.";
            convertBtn.disabled = false;
        }
    });

    // Yardımcı Fonksiyonlar
    function setLoadingState(isLoading, text) {
        submitBtn.disabled = isLoading;
        submitBtnText.textContent = text;
        submitSpinner.style.display = isLoading ? "inline-block" : "none";
    }

    function resetUI() {
        videoPreview.style.display = "none";
        progressContainer.style.display = "none";
        resultBox.style.display = "none";
        progressBarFill.style.width = "0%";
    }

    function simulateProgress() {
        let percent = 5;
        progressBarFill.style.width = percent + "%";
        statusText.textContent = "Medya işleniyor... %" + percent;

        const interval = setInterval(() => {
            if (percent < 90) {
                percent += Math.floor(Math.random() * 15) + 5;
                if (percent > 90) percent = 90;
                progressBarFill.style.width = percent + "%";
                statusText.textContent = "Dönüştürülüyor... %" + percent;
            } else {
                clearInterval(interval);
            }
        }, 800);
    }
});
