use super::{run_chroot, Job, UiSender};

/// COMAR servislerini ve tetikleyicilerini yapılandırır.
pub struct RunComarJob {
    #[allow(dead_code)]
    pub mount: String,
}

#[async_trait::async_trait]
impl Job for RunComarJob {
    fn name(&self) -> &str { "job_comar" }

    async fn run(&self, ui: &UiSender) -> Result<(), String> {
        // pisi configure-pending: paket post-install scriptlerini çalıştırır.
        // Yapılandırılacak paket yoksa çıkış kodu sıfır dışı olabilir — fatal değil.
        // pisi cp işlemi kurulum sonrası atlanıyor (kullanıcı isteği).
        let _ = ui;
        // ui.log("pisi paketleri yapılandırılıyor (COMAR)…");
        // match run_chroot(&self.mount, &["pisi", "cp"]).await {
        //     Ok(_) => {
        //         ui.log("✓ pisi paketleri yapılandırıldı");
        //     }
        //     Err(e) => {
        //         // "no packages to configure" gibi durumlar hata değil
        //         if e.contains("no packages") || e.contains("Nothing to do") {
        //             ui.log(" pisi: yapılandırılacak paket yok, atlanıyor");
        //         } else {
        //             // Gerçek hata — uyar ama kurulumu durdurma
        //             ui.log(format!("pisi paketleri yapılandırma uyarısı: {}", e));
        //             ui.log("Bu uyarı kritik değilse kurulum devam edecek.");
        //         }
        //     }
        // }
        Ok(())
    }
}

/// ldconfig: paylaşımlı kütüphane önbelleğini yeniden oluşturur.
pub struct RunLdconfigJob {
    pub mount: String,
}

#[async_trait::async_trait]
impl Job for RunLdconfigJob {
    fn name(&self) -> &str { "job_ldconfig" }

    async fn run(&self, ui: &UiSender) -> Result<(), String> {
        ui.log("ldconfig çalıştırılıyor…");
        match run_chroot(&self.mount, &["ldconfig"]).await {
            Ok(_) => ui.log("✓ ldconfig tamamlandı"),
            Err(e) => ui.log(format!("⚠ ldconfig uyarısı: {}", e)),
        }
        Ok(())
    }
}

/// update-environment: PisiLinux init/betiklerini yeniden yapılandırır.
pub struct UpdateEnvironmentJob {
    pub mount: String,
}

#[async_trait::async_trait]
impl Job for UpdateEnvironmentJob {
    fn name(&self) -> &str { "job_update_env" }

    async fn run(&self, ui: &UiSender) -> Result<(), String> {
        ui.log("update-environment çalıştırılıyor…");
        match run_chroot(&self.mount, &["update-environment"]).await {
            Ok(_) => ui.log("✓ update-environment tamamlandı"),
            Err(e) => ui.log(format!("⚠ update-environment uyarısı: {}", e)),
        }
        Ok(())
    }
}

/// Live ortam izlerini hedef sistemden temizler.
pub struct CleanupLiveJob {
    pub mount: String,
}

#[async_trait::async_trait]
impl Job for CleanupLiveJob {
    fn name(&self) -> &str { "job_cleanup_live" }

    async fn run(&self, ui: &UiSender) -> Result<(), String> {
        let mt = &self.mount;
        ui.log("Live ortam izleri temizleniyor…");

        // run/livemedia
        let _ = tokio::fs::remove_dir_all(format!("{}/run/livemedia", mt)).await;
        // var/cache/pisi/packages
        let _ = tokio::fs::remove_dir_all(format!("{}/var/cache/pisi/packages", mt)).await;
        // YALI desktop dosyaları
        //let _ = tokio::fs::remove_file(format!("{}/usr/share/applications/yali.desktop", mt)).await;
        //let _ = tokio::fs::remove_file(format!("{}/usr/share/applications/yali-bin.desktop", mt)).await;
        let _ = tokio::fs::remove_dir_all(format!("{}/bootmnt", mt)).await;
        //pisi kullanıcısını sil (ev diziniyle birlikte), YALI paketlerini kaldır
        let _ = run_chroot(&self.mount, &["userdel", "-r", "pisi"]).await;
        let _ = run_chroot(&self.mount, &["pisi", "rm", "yali-rs"]).await;
        // live paket deposunu kaldır
        let _ = run_chroot(&self.mount, &["pisi", "rr", "live"]).await;
        // depolarları yeniden ekle (stable2 + contrib)
        ui.log("Depolar Ekleniyor…");
        let _ = run_chroot(&self.mount, &["pisi", "ar", "stable2", "https://stable2.pisilinux.org/pisi-index.xml.xz"]).await;
        let _ = run_chroot(&self.mount, &["pisi", "ar", "contrib", "https://contrib.pisilinux.org/pisi-index.xml.xz"]).await;
        // depoları aktif et
        ui.log("Depolar aktif ediliyor...");
        let _ = run_chroot(&self.mount, &["pisi", "er", "contrib", "stable2"]).await;
        // paket listelerini güncelle
        ui.log("Depolar Güncelleniyor...");
        let _ = run_chroot(&self.mount, &["pisi", "ur"]).await;

        ui.log("✓ Live temizlik tamamlandı");
        Ok(())
    }
}
