import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'ltx_client.dart'; import 'ltx_port_kesfedici.dart'; import 'ltx_token_yonetici.dart'; class LtxBaglanti { final String url; final String? token; final bool baglandi; final String? hata; const LtxBaglanti({ required this.url, this.token, required this.baglandi, this.hata, }); static const yok = LtxBaglanti(url: '', baglandi: false); LtxClient? get client => baglandi ? LtxClient(url: url, token: token) : null; } class LtxBaglantiNotifier extends StateNotifier { LtxBaglantiNotifier() : super(LtxBaglanti.yok); Future kesfet({String? manuelToken}) async { final port = await LtxPortKesfedici.portuBul(); if (port == null) { state = const LtxBaglanti( url: '', baglandi: false, hata: 'LTX Desktop bulunamadı. Lütfen LTX Desktop\'u açın.', ); return; } final url = 'http://127.0.0.1:$port'; // 1) Manuel token varsa onu dene if (manuelToken != null && manuelToken.isNotEmpty) { if (await LtxTokenYonetici.dogrula(url, manuelToken)) { state = LtxBaglanti(url: url, token: manuelToken, baglandi: true); await LtxTokenYonetici.kaydet(manuelToken); return; } } // 2) Auth gerekmiyor olabilir if (await LtxTokenYonetici.dogrula(url, null)) { state = LtxBaglanti(url: url, baglandi: true); return; } // 3) Kaydedilen token'ı dene String? token = await LtxTokenYonetici.kaydedilenOku(); if (token != null && await LtxTokenYonetici.dogrula(url, token)) { state = LtxBaglanti(url: url, token: token, baglandi: true); await LtxTokenYonetici.kaydet(token); return; } // 4) Process belleğinden canlı token oku (Python pipeline tarzı) token = await LtxTokenYonetici.processBellektenOku(); if (token != null && await LtxTokenYonetici.dogrula(url, token)) { state = LtxBaglanti(url: url, token: token, baglandi: true); await LtxTokenYonetici.kaydet(token); return; } state = LtxBaglanti( url: url, baglandi: false, hata: 'Auth token bulunamadı; lütfen ayarlardan token girin.', ); } void tokenGir(String token) async { if (state.url.isEmpty) { await kesfet(manuelToken: token); return; } final ok = await LtxTokenYonetici.dogrula(state.url, token); if (ok) { await LtxTokenYonetici.kaydet(token); state = LtxBaglanti(url: state.url, token: token, baglandi: true); } else { state = LtxBaglanti( url: state.url, token: token, baglandi: false, hata: 'Token geçersiz.', ); } } } final ltxBaglantiProvider = StateNotifierProvider( (ref) => LtxBaglantiNotifier(), );