Files
CityCards_Customer_Flutter/lib/itinerary_creation/bloc/get_itinerary_bloc.dart

240 lines
7.9 KiB
Dart

import 'package:bloc/bloc.dart';
import 'package:citycards_customer/itinerary_creation/repository/itinerary_repository.dart';
import 'package:citycards_customer/itinerary_creation/models/my_itinerary_model.dart';
import 'package:citycards_customer/localPreference/local_preference.dart';
import 'package:equatable/equatable.dart';
part 'get_itinerary_event.dart';
part 'get_itinerary_state.dart';
class GetItineraryBloc extends Bloc<GetItineraryEvent, GetItineraryState> {
final ItineraryRepository _repository;
GetItineraryBloc({ItineraryRepository? repository})
: _repository = repository ?? ItineraryRepository(),
super(GetItineraryInitial()) {
on<CheckLoginAndFetchItinerary>(_onCheckLoginAndFetch);
on<GetIiterary>(_onGetItinerary);
}
Future<void> _onCheckLoginAndFetch(
CheckLoginAndFetchItinerary event,
Emitter<GetItineraryState> emit,
) async {
try {
emit(GetItineraryLoading());
final isLoggedIn = await LocalPreference.getLogin();
if (!isLoggedIn) {
emit(GetItineraryNotLoggedIn());
return;
}
final response = await _repository.fetchMyItineraries();
// Check if user has unlimited pass
if (!response.isUnlimitedPass) {
emit(GetItineraryRequiresPass(itineraries: response.itineraries));
return;
}
emit(GetItinerarySuccessfully(itineraries: response.itineraries));
} catch (e) {
emit(GetItineraryFailed(
error: e.toString().contains('Exception')
? e.toString().replaceAll('Exception: ', '')
: "Failed to load itineraries. Please try again."));
}
}
Future<void> _onGetItinerary(
GetIiterary event,
Emitter<GetItineraryState> emit,
) async {
try {
emit(GetItineraryLoading());
final response = await _repository.fetchMyItineraries();
// Check if user has unlimited pass
if (!response.isUnlimitedPass) {
emit(GetItineraryRequiresPass(itineraries: response.itineraries));
return;
}
emit(GetItinerarySuccessfully(itineraries: response.itineraries));
} catch (e) {
emit(GetItineraryFailed(
error: e.toString().contains('Exception')
? e.toString().replaceAll('Exception: ', '')
: "Failed to load itineraries. Please try again."));
}
}
}
// import 'package:bloc/bloc.dart';
// import 'package:citycards_customer/itinerary_creation/repository/itinerary_repository.dart';
// import 'package:citycards_customer/itinerary_creation/models/my_itinerary_model.dart';
// import 'package:citycards_customer/localPreference/local_preference.dart';
// import 'package:equatable/equatable.dart';
// part 'get_itinerary_event.dart';
// part 'get_itinerary_state.dart';
//
// class GetItineraryBloc extends Bloc<GetItineraryEvent, GetItineraryState> {
// final ItineraryRepository _repository;
//
// GetItineraryBloc({ItineraryRepository? repository})
// : _repository = repository ?? ItineraryRepository(),
// super(GetItineraryInitial()) {
// on<CheckLoginAndFetchItinerary>(_onCheckLoginAndFetch);
// on<GetIiterary>(_onGetItinerary);
// }
//
// Future<void> _onCheckLoginAndFetch(
// CheckLoginAndFetchItinerary event,
// Emitter<GetItineraryState> emit,
// ) async {
// try {
// emit(GetItineraryLoading());
//
// final isLoggedIn = await LocalPreference.getLogin();
//
// if (!isLoggedIn) {
// emit(GetItineraryNotLoggedIn());
// return;
// }
//
// final response = await _repository.fetchMyItineraries();
//
// // Add static itinerary to the list
// final itinerariesWithStatic = [
// _createStaticItinerary(),
// ...response.itineraries,
// ];
//
// // Check if user has unlimited pass
// if (!response.isUnlimitedPass) {
// emit(GetItineraryRequiresPass(itineraries: itinerariesWithStatic));
// return;
// }
//
// emit(GetItinerarySuccessfully(itineraries: itinerariesWithStatic));
// } catch (e) {
// emit(GetItineraryFailed(
// error: e.toString().contains('Exception')
// ? e.toString().replaceAll('Exception: ', '')
// : "Failed to load itineraries. Please try again."));
// }
// }
//
// Future<void> _onGetItinerary(
// GetIiterary event,
// Emitter<GetItineraryState> emit,
// ) async {
// try {
// emit(GetItineraryLoading());
//
// final response = await _repository.fetchMyItineraries();
//
// // Add static itinerary to the list
// final itinerariesWithStatic = [
// _createStaticItinerary(),
// ...response.itineraries,
// ];
//
// // Check if user has unlimited pass
// if (!response.isUnlimitedPass) {
// emit(GetItineraryRequiresPass(itineraries: itinerariesWithStatic));
// return;
// }
//
// emit(GetItinerarySuccessfully(itineraries: itinerariesWithStatic));
// } catch (e) {
// emit(GetItineraryFailed(
// error: e.toString().contains('Exception')
// ? e.toString().replaceAll('Exception: ', '')
// : "Failed to load itineraries. Please try again."));
// }
// }
//
// // Helper method to create static/temporary itinerary
// MyItinerary _createStaticItinerary() {
// return MyItinerary(
// id: -1, // Negative ID to identify as static data
// userXid: 0,
// cityXid: 1,
// address: "Sample Location, City Center",
// latitude: 40.7128,
// longitude: -74.0060,
// tripEnergy: "Relaxed",
// travelingWithKids: false,
// dietaryPreferences: ["Vegetarian"],
// preferences: Preferences(
// shopping: 3,
// wildlife: 2,
// landmarks: 5,
// scenicViews: 4,
// artAndMuseums: 5,
// ),
// totalDays: 2,
// aiModel: "static-v1",
// promptVersion: "1.0",
// isActive: true,
// createdAt: DateTime.now().toIso8601String(),
// updatedAt: DateTime.now().toIso8601String(),
// days: [
// ItineraryDay(
// id: -1,
// itineraryXid: -1,
// dayNumber: 1,
// title: "Day 1: City Exploration",
// summary: "Explore the main attractions and local cuisine",
// items: [
// DayItem(
// id: -1,
// itineraryDayXid: -1,
// timeSlot: "09:00 AM",
// title: "Morning Coffee",
// description: "Start your day with a cup of local coffee",
// locationName: "Central Cafe",
// imageUrl: "https://via.placeholder.com/300",
// latitude: 40.7128,
// longitude: -74.0060,
// ),
// DayItem(
// id: -2,
// itineraryDayXid: -1,
// timeSlot: "11:00 AM",
// title: "Visit Historic Landmark",
// description: "Explore the city's most famous landmark",
// locationName: "City Monument",
// imageUrl: "https://via.placeholder.com/300",
// latitude: 40.7589,
// longitude: -73.9851,
// ),
// ],
// ),
// ItineraryDay(
// id: -2,
// itineraryXid: -1,
// dayNumber: 2,
// title: "Day 2: Museum & Parks",
// summary: "Discover art and nature",
// items: [
// DayItem(
// id: -3,
// itineraryDayXid: -2,
// timeSlot: "10:00 AM",
// title: "Art Museum Visit",
// description: "Immerse yourself in contemporary art",
// locationName: "Modern Art Museum",
// imageUrl: "https://via.placeholder.com/300",
// latitude: 40.7614,
// longitude: -73.9776,
// ),
// ],
// ),
// ],
// );
// }
// }