import sys import re def refactor_controller(filepath): with open(filepath, 'r') as f: content = f.read() # 1. Change double to String for pricing variables content = re.sub(r'double totalPassengerSpeed = 0;', "String totalPassengerSpeed = '0';", content) content = re.sub(r'double totalPassengerBalash = 0;', "String totalPassengerBalash = '0';", content) content = re.sub(r'double totalPassengerComfort = 0;', "String totalPassengerComfort = '0';", content) content = re.sub(r'double totalPassengerElectric = 0;', "String totalPassengerElectric = '0';", content) content = re.sub(r'double totalPassengerLady = 0;', "String totalPassengerLady = '0';", content) content = re.sub(r'double totalPassengerScooter = 0;', "String totalPassengerScooter = '0';", content) content = re.sub(r'double totalPassengerVan = 0;', "String totalPassengerVan = '0';", content) content = re.sub(r'double totalPassengerRayehGai = 0;', "String totalPassengerRayehGai = '0';", content) content = re.sub(r'double totalPassengerRayehGaiComfort = 0;', "String totalPassengerRayehGaiComfort = '0';", content) content = re.sub(r'double totalPassengerRayehGaiBalash = 0;', "String totalPassengerRayehGaiBalash = '0';", content) content = re.sub(r'double totalPassenger = 0;', "String totalPassenger = '0';", content) content = re.sub(r'double totalCostPassenger = 0;', "String totalCostPassenger = '0';", content) # 2. Replace bottomSheet method bottom_sheet_pattern = re.compile(r'Future bottomSheet\(\) async \{.*?(?=update\(\);\n\s*mapEngine\.changeBottomSheetShown\(forceValue: true\);\n\s*\})', re.DOTALL) new_bottom_sheet = '''Future bottomSheet() async { durationToAdd = Duration(seconds: durationToRide); hours = durationToAdd.inHours; minutes = (durationToAdd.inMinutes % 60).round(); final DateTime currentTime = DateTime.now(); newTime = currentTime.add(durationToAdd); try { final res = await CRUD().post(link: AppLink.getPrices, payload: { 'distance': distance.toString(), 'durationToRide': durationToRide.toString(), 'startNameAddress': startNameAddress, 'endNameAddress': endNameAddress, 'destLat': myDestination.latitude.toString(), 'destLng': myDestination.longitude.toString(), 'passengerLat': newMyLocation.latitude.toString(), 'passengerLng': newMyLocation.longitude.toString(), 'walletVal': box.read(BoxName.passengerWalletTotal)?.toString() ?? '0', 'activeMenuWaypointCount': activeMenuWaypointCount.toString(), }); if (res != 'failure') { var response = jsonDecode(res); if (response['status'] == 'success') { var data = response['data']; totalPassengerSpeed = data['totalPassengerSpeed']?.toString() ?? '0'; totalPassengerBalash = data['totalPassengerBalash']?.toString() ?? '0'; totalPassengerComfort = data['totalPassengerComfort']?.toString() ?? '0'; totalPassengerElectric = data['totalPassengerElectric']?.toString() ?? '0'; totalPassengerLady = data['totalPassengerLady']?.toString() ?? '0'; totalPassengerScooter = data['totalPassengerScooter']?.toString() ?? '0'; totalPassengerVan = data['totalPassengerVan']?.toString() ?? '0'; totalPassengerRayehGai = data['totalPassengerRayehGai']?.toString() ?? '0'; totalPassengerRayehGaiComfort = data['totalPassengerRayehGaiComfort']?.toString() ?? '0'; totalPassengerRayehGaiBalash = data['totalPassengerRayehGaiBalash']?.toString() ?? '0'; totalPassenger = totalPassengerSpeed; totalCostPassenger = totalPassenger; } } } catch (e) { Log.print("Error fetching prices: $e"); } ''' content = bottom_sheet_pattern.sub(new_bottom_sheet, content) # 3. Replace applyPromoCodeToPassenger promo_pattern = re.compile(r'void applyPromoCodeToPassenger\(BuildContext context\) async \{.*?(?=Get\.back\(\);\n\s*await Future\.delayed\(const Duration\(milliseconds: 120\)\);\n\s*\} catch \(e\) \{)', re.DOTALL) new_promo = '''void applyPromoCodeToPassenger(BuildContext context) async { if (promoTaken == true) { MyDialog().getDialog('Promo Already Used'.tr, 'You have already used this promo code.'.tr, () => Get.back()); return; } if (!promoFormKey.currentState!.validate()) return; try { final res = await CRUD().post(link: AppLink.getPrices, payload: { 'distance': distance.toString(), 'durationToRide': durationToRide.toString(), 'startNameAddress': startNameAddress, 'endNameAddress': endNameAddress, 'destLat': myDestination.latitude.toString(), 'destLng': myDestination.longitude.toString(), 'passengerLat': newMyLocation.latitude.toString(), 'passengerLng': newMyLocation.longitude.toString(), 'walletVal': box.read(BoxName.passengerWalletTotal)?.toString() ?? '0', 'activeMenuWaypointCount': activeMenuWaypointCount.toString(), 'promo_code': promo.text, }); if (res != 'failure') { var response = jsonDecode(res); if (response['status'] == 'success') { var data = response['data']; totalPassengerSpeed = data['totalPassengerSpeed']?.toString() ?? '0'; totalPassengerBalash = data['totalPassengerBalash']?.toString() ?? '0'; totalPassengerComfort = data['totalPassengerComfort']?.toString() ?? '0'; totalPassengerElectric = data['totalPassengerElectric']?.toString() ?? '0'; totalPassengerLady = data['totalPassengerLady']?.toString() ?? '0'; totalPassengerScooter = data['totalPassengerScooter']?.toString() ?? '0'; totalPassengerVan = data['totalPassengerVan']?.toString() ?? '0'; totalPassengerRayehGai = data['totalPassengerRayehGai']?.toString() ?? '0'; totalPassengerRayehGaiComfort = data['totalPassengerRayehGaiComfort']?.toString() ?? '0'; totalPassengerRayehGaiBalash = data['totalPassengerRayehGaiBalash']?.toString() ?? '0'; promoTaken = true; update(); Confetti.launch( context, options: const ConfettiOptions(particleCount: 100, spread: 70, y: 0.6), ); } else { MyDialog().getDialog('Promo Error'.tr, response['message']?.toString() ?? 'Invalid Promo'.tr, () => Get.back()); return; } } ''' content = promo_pattern.sub(new_promo, content) with open(filepath, 'w') as f: f.write(content) print(f"Refactored {filepath}") if __name__ == '__main__': refactor_controller(sys.argv[1])