import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; import '../services/xtream_api.dart'; import '../models/xtream_models.dart'; enum ContentType { live, movies, series } class IPTVProvider extends ChangeNotifier { final XtreamApiService _api = XtreamApiService(); bool _isLoading = false; String? _error; XtreamUserInfo? _userInfo; List _liveCategories = []; List _vodCategories = []; List _seriesCategories = []; List _liveStreams = []; List _vodStreams = []; List _seriesList = []; List _seriesEpisodes = []; String _selectedLiveCategory = ''; String _selectedVodCategory = ''; XtreamSeries? _selectedSeries; bool get isLoading => _isLoading; String? get error => _error; XtreamUserInfo? get userInfo => _userInfo; XtreamApiService get api => _api; List get liveCategories => _liveCategories; List get vodCategories => _vodCategories; List get seriesCategories => _seriesCategories; List get liveStreams => _liveStreams; List get vodStreams => _vodStreams; List get seriesList => _seriesList; List get seriesEpisodes => _seriesEpisodes; String get selectedLiveCategory => _selectedLiveCategory; String get selectedVodCategory => _selectedVodCategory; XtreamSeries? get selectedSeries => _selectedSeries; Future login(String server, String username, String password) async { _isLoading = true; _error = null; notifyListeners(); try { _api.setCredentials(server, username, password); _userInfo = await _api.getUserInfo(); await _loadCategories(); await _saveCredentials(server, username, password); } catch (e) { _error = e.toString(); } _isLoading = false; notifyListeners(); } Future _loadCategories() async { try { _liveCategories = await _api.getLiveCategories(); _vodCategories = await _api.getVodCategories(); _seriesCategories = await _api.getSeriesCategories(); } catch (e) { _error = e.toString(); } } Future loadLiveStreams([String categoryId = '']) async { _isLoading = true; notifyListeners(); try { _liveStreams = await _api.getLiveStreams(categoryId); _selectedLiveCategory = categoryId; } catch (e) { _error = e.toString(); } _isLoading = false; notifyListeners(); } Future loadVodStreams([String categoryId = '']) async { _isLoading = true; notifyListeners(); try { _vodStreams = await _api.getVodStreams(categoryId); _selectedVodCategory = categoryId; } catch (e) { _error = e.toString(); } _isLoading = false; notifyListeners(); } Future loadSeries() async { _isLoading = true; notifyListeners(); try { _seriesList = await _api.getSeries(); } catch (e) { _error = e.toString(); } _isLoading = false; notifyListeners(); } Future loadSeriesEpisodes(XtreamSeries series) async { _isLoading = true; notifyListeners(); try { _selectedSeries = series; _seriesEpisodes = await _api.getSeriesEpisodes(series.seriesId); } catch (e) { _error = e.toString(); } _isLoading = false; notifyListeners(); } void clearError() { _error = null; notifyListeners(); } Future _saveCredentials(String server, String username, String password) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString('server', server); await prefs.setString('username', username); await prefs.setString('password', password); } Future loadSavedCredentials() async { final prefs = await SharedPreferences.getInstance(); final server = prefs.getString('server'); final username = prefs.getString('username'); final password = prefs.getString('password'); if (server != null && username != null && password != null) { await login(server, username, password); return true; } return false; } Future logout() async { final prefs = await SharedPreferences.getInstance(); await prefs.remove('server'); await prefs.remove('username'); await prefs.remove('password'); _userInfo = null; _liveCategories = []; _vodCategories = []; _seriesCategories = []; _liveStreams = []; _vodStreams = []; _seriesList = []; notifyListeners(); } }