import googlemaps import datetime import os # Crear un cliente de la API de Google Maps gmaps = googlemaps.Client(key=os.environ["GOOGLE_MAPS_API_KEY"]) class Trip: def __init__(self, origin, destination, departure_date, return_date, cost, car_type, pax): self.origin = origin self.destination = destination self.departure_date = departure_date self.return_date = return_date # esto puede ser None ahora self.cost = cost self.car_type = car_type self.pax = pax def to_dict(self): trip_dict = { 'origin': self.origin, 'destination': self.destination, 'cost': self.cost, 'car_type': self.car_type, 'departure_date': self.departure_date.isoformat(), 'pax': self.pax } if self.return_date is not None: trip_dict['return_date'] = self.return_date.isoformat() return trip_dict def determine_car_type(pax): if 0 < pax < 6: return "Transporter" elif pax < 16: return "Crafter" elif pax < 23: return "Minibus" elif pax < 50: return "Bus" else: return "Invalid" def get_distance(origin: str, destination: str): matrix = gmaps.distance_matrix(origin, destination) distance_meters = matrix['rows'][0]['elements'][0]['distance']['value'] return distance_meters / 1000 def calculate_cost(distance, car_type): base_cost_per_km = { "Transporter": 50, "Crafter": 75, "Minibus": 100, "Bus": 150 } cost = distance * base_cost_per_km[car_type] return round(max(500, min(20000, cost))) def generate_trip_data(origin: str, destination: str, date_from: datetime, date_to: datetime, car_type: str, pax: int): distance = get_distance(origin, destination) base_cost = calculate_cost(distance, car_type) trip = Trip(origin, destination, date_from, date_to, base_cost, car_type, pax) return trip def get_trip(origin: str, destination: str, date_from: str, date_to=None, pax=1, round_trip: bool = False): date_from = datetime.datetime.strptime(date_from, "%Y-%m-%d") if date_to is not None: date_to = datetime.datetime.strptime(date_to, "%Y-%m-%d") car_type = determine_car_type(pax) trip_origin = generate_trip_data( origin, destination, date_from, date_to if round_trip else None, car_type, pax) trip_return = None if round_trip and date_to is not None: trip_return = generate_trip_data( destination, origin, date_to, None, car_type, pax) trip_origin_dict = trip_origin.to_dict() trip_info = "The trip to your destination is from " + trip_origin_dict['origin'] + " to " + trip_origin_dict['destination'] + " with a cost of " + str( trip_origin_dict['cost']) + " and a car type of " + trip_origin_dict['car_type'] + ". " if trip_return is not None: trip_return_dict = trip_return.to_dict() trip_info += "The return trip is from " + trip_return_dict['origin'] + " to " + trip_return_dict['destination'] + " with a cost of " + str( trip_return_dict['cost']) + " and a car type of " + trip_return_dict['car_type'] + "." return trip_info def get_trip_info(trip_origin: Trip, trip_return: Trip = None): trip_origin = trip_origin.to_dict() trip_info = "The trip to your destination is from " + trip_origin['origin'] + " to " + trip_origin['destination'] + " with a cost of " + str( trip_origin['cost']) + " and a car type of " + trip_origin['car_type'] + ". " if trip_return is not None: trip_return = trip_return.to_dict() trip_info += "The return trip is from " + trip_return['origin'] + " to " + trip_return['destination'] + " with a cost of " + str( trip_return['cost']) + " and a car type of " + trip_return['car_type'] + "." return trip_info