package pricing import ( "fmt" "slices" "github.com/manterfield/go-mapreader" ) type PFM63PricingService struct{} func NewPFM63PricingService() (*PFM63PricingService, error) { return &PFM63PricingService{}, nil } func (s *PFM63PricingService) Prices(vars map[string]any) (map[string]Price, error) { journey_type, err := mapreader.StrErr(vars, "journey_type") if err != nil { return nil, fmt.Errorf("journey_type parameter not found : %v", err) } fmt.Println(journey_type) passenger_priority, err := mapreader.BoolErr(vars, "passenger.priority") if err != nil { return nil, fmt.Errorf("passenger_priority parameter not found : %v", err) } passenger_history, err := mapreader.IntErr(vars, "passenger.history") if err != nil { return nil, fmt.Errorf("passenger_history parameter not found : %v", err) } destination_locality, err := mapreader.StrErr(vars, "journey.passenger_drop.properties.locality") if err != nil { return nil, fmt.Errorf("destination_locality parameter not found : %v", err) } driver_distance, err := mapreader.IntErr(vars, "journey.driver_distance") if err != nil { return nil, fmt.Errorf("driver_distance parameter not found : %v", err) } passenger_distance, err := mapreader.IntErr(vars, "journey.passenger_distance") if err != nil { return nil, fmt.Errorf("passenger_distance parameter not found : %v", err) } pricing := 0.0 if passenger_history == 0 { pricing = 0 } else if passenger_priority && passenger_distance <= 5 { pricing = 0 } else if slices.Contains([]string{"Clermont-Ferrand", "Ussel", "Aubusson", "Riom"}, destination_locality) { pricing = 5 } else if passenger_distance < 15 { pricing = 2 } else if passenger_distance < 30 { pricing = 4 } else if passenger_distance < 45 { pricing = 6 } else if passenger_distance < 60 { pricing = 7 } else if passenger_distance < 75 { pricing = 9 } else if passenger_distance < 90 { pricing = 10 } else if passenger_distance < 105 { pricing = 12 } else if passenger_distance < 120 { pricing = 15 } else if passenger_distance < 140 { pricing = 17 } fmt.Println(pricing) kmCompensation := 0.2 if journey_type == "carpool" { kmCompensation = 0.09 } return map[string]Price{ "passenger": { Amount: pricing, Currency: "EUR/2", }, "driver": { Amount: kmCompensation * float64(driver_distance), Currency: "EUR/2", }, }, nil }