// [TSM.ID].[11031972] -- All Rights Reserved. Proprietary & Confidential.
use wasm_bindgen::prelude::*;
use web_sys::{MediaRecorder, MediaStream};

/// The Cloud DVR (Phase 18)
/// Mesin perekam parasitik yang berjalan murni di RAM/CPU pengguna.
/// Memungut beban render server XCU menjadi Rp 0.
#[wasm_bindgen]
pub async fn start_cloud_dvr(media_stream: MediaStream, s3_upload_url: &str) -> Result<(), JsValue> {
    web_sys::console::log_1(&"XCU: THE CLOUD DVR (Parasitic Ingestor) ACTIVATED!".into());
    web_sys::console::log_1(&"Notice: Your local machine is now rendering and uploading the video directly to S3.".into());

    // 1. Membajak aliran Media (Webcam & Layar) yang masih telanjang sebelum dienkripsi
    let recorder = MediaRecorder::new_with_media_stream(&media_stream)?;

    // 2. Pasang pendengar (listener) ketika ada bongkahan video yang sudah jadi
    let upload_url = s3_upload_url.to_string();
    let on_data_available = Closure::wrap(Box::new(move |_event: web_sys::Event| {
        // Pada implementasi riil, event ini membawa bongkahan Blob (WebM/MKV).
        // Kita menggunakan Fetch API (HTTP PUT) untuk melempar potongan Blob ini
        // ke pre-signed URL Amazon S3 atau Cloudflare R2 secara langsung.
        web_sys::console::log_1(&format!("XCU DVR: Uploading chunk directly to S3: {}", upload_url).into());
    }) as Box<dyn FnMut(web_sys::Event)>);

    recorder.set_ondataavailable(Some(on_data_available.as_ref().unchecked_ref()));
    on_data_available.forget(); // Biarkan abadi selama rapat

    // 3. Eksekusi perekaman berantai (Muntahkan blob setiap 1.000 milidetik / 1 detik)
    recorder.start_with_time_slice(1000)?;

    Ok(())
}
