import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:path/path.dart' as p; import '../comfy/comfy_istemci.dart'; /// ComfyUI'de gerçekten kurulu model dosyaları (klasör → küçük-harf basename seti). /// Kaynak: ComfyUI loader combo'ları (dosya yolu tahmininden güvenilir). final kuruluModellerProvider = FutureProvider>>((ref) async { final istemci = ref.watch(comfyIstemciProvider); // klasör → (node, input) const kaynaklar = { 'checkpoints': ('CheckpointLoaderSimple', 'ckpt_name'), 'diffusion_models': ('UNETLoader', 'unet_name'), 'vae': ('VAELoader', 'vae_name'), 'text_encoders': ('CLIPLoader', 'clip_name'), 'upscale_models': ('UpscaleModelLoader', 'model_name'), 'controlnet': ('ControlNetLoader', 'control_net_name'), 'loras': ('LoraLoader', 'lora_name'), }; final sonuc = >{}; await Future.wait(kaynaklar.entries.map((e) async { try { final liste = await istemci.comboSecenekleri(e.value.$1, e.value.$2); sonuc[e.key] = liste .map((x) => p.basename(x).toLowerCase()) .toSet(); } catch (_) { sonuc[e.key] = {}; } })); return sonuc; }); /// ComfyUI'nin GERÇEK sampler listesi (KSampler combo'su — beta/er_sde dahil /// kurulu ne varsa). Offline'da boş → ekranlar kendi fallback'ine düşer. final comfySamplerlarProvider = FutureProvider>((ref) async { try { return await ref .watch(comfyIstemciProvider) .comboSecenekleri('KSampler', 'sampler_name'); } catch (_) { return const []; } }); /// ComfyUI'nin GERÇEK scheduler listesi (beta, linear_quadratic, kl_optimal...). final comfySchedulerlarProvider = FutureProvider>((ref) async { try { return await ref .watch(comfyIstemciProvider) .comboSecenekleri('KSampler', 'scheduler'); } catch (_) { return const []; } }); /// Canlı ComfyUI listesi (boşsa fallback) + mevcut değer garantili → dropdown /// asla çökmez, kurulu tüm sampler/scheduler'ları (beta dahil) gösterir. List birlesikListe(List? canli, List fallback, String mevcut) { final liste = [...(canli == null || canli.isEmpty ? fallback : canli)]; if (!liste.contains(mevcut)) liste.insert(0, mevcut); return liste; }