""" 3 complete negotiation scenarios with pre-built rounds. Each round has: proposal, satisfaction scores, concessions, reasoning. The negotiation engine iterates through these instead of calling Gemini. """ MOCK_SCENARIOS = { # ───────────────────────────────────────────────────── # SCENARIO 1: Expense Splitting (Goa Trip) # ───────────────────────────────────────────────────── "expenses": { "feature_type": "expenses", "rounds": [ { "round_number": 1, "proposer": "A", "action": "propose", "proposal": { "summary": "Hotel 50-50, Fuel 60-40 (I drove), Dinner 50-50. B owes A ₹8,200", "details": { "hotel": {"amount": 12000, "split": "50-50"}, "fuel": {"amount": 3000, "split": "60-40"}, "dinner": {"amount": 2000, "split": "50-50"}, "settlement": {"from": "B", "to": "A", "amount": 8200, "payee_upi": "rahul@paytm", "payee_name": "Rahul"} }, "for_party_a": "Fuel 60-40 reflects driving effort", "for_party_b": "Hotel and dinner are fair 50-50" }, "satisfaction_score": 90, "reasoning": "Opening with ideal: 60-40 fuel since I drove the entire way.", "concessions_made": [], "concessions_requested": ["Accept 60-40 fuel split"] }, { "round_number": 2, "proposer": "B", "action": "counter", "proposal": { "summary": "Hotel 50-50, Fuel 50-50 (I navigated + planned route), Dinner 50-50", "details": { "hotel": {"amount": 12000, "split": "50-50"}, "fuel": {"amount": 3000, "split": "50-50"}, "dinner": {"amount": 2000, "split": "50-50"}, "settlement": {"from": "B", "to": "A", "amount": 7500, "payee_upi": "rahul@paytm", "payee_name": "Rahul"} }, "for_party_a": "Equal base split on everything", "for_party_b": "Navigation + route planning justifies equal fuel" }, "satisfaction_score": 55, "reasoning": "Countering with 50-50 fuel. Navigation effort was significant.", "concessions_made": ["Accepted hotel and dinner at 50-50"], "concessions_requested": ["Equal fuel split"] }, { "round_number": 3, "proposer": "A", "action": "accept", "proposal": { "summary": "AGREED: Hotel 50-50, Fuel 55-45 (compromise), Dinner 50-50. B owes ₹8,050", "details": { "hotel": {"amount": 12000, "split": "50-50"}, "fuel": {"amount": 3000, "split": "55-45"}, "dinner": {"amount": 2000, "split": "50-50"}, "settlement": {"from": "B", "to": "A", "amount": 8050, "payee_upi": "rahul@paytm", "payee_name": "Rahul"} }, "for_party_a": "55-45 acknowledges driving. Fair middle ground.", "for_party_b": "Only ₹150 more than 50-50. Navigation valued." }, "satisfaction_score": 76, "reasoning": "55-45 is fair. Both efforts acknowledged. Accepting.", "concessions_made": ["Fuel 60-40 → 55-45"], "concessions_requested": [] } ] }, # ───────────────────────────────────────────────────── # SCENARIO 2: Restaurant Decision # ───────────────────────────────────────────────────── "collaborative": { "feature_type": "collaborative", "rounds": [ { "round_number": 1, "proposer": "A", "action": "propose", "proposal": { "summary": "Thai food at Jaan, Bandra — ₹1,200 for two, great veg options", "details": { "restaurant": "Jaan Thai Restaurant", "cuisine": "Thai", "location": "Hill Road, Bandra West", "price_for_two": 1200, "rating": 4.3, "veg_friendly": True }, "for_party_a": "Spicy Thai options, Bandra location, casual vibe", "for_party_b": "Vegetarian-friendly menu, within ₹1,200 budget" }, "satisfaction_score": 85, "reasoning": "Thai is the overlap. Jaan has spice + veg options.", "concessions_made": ["Chose Thai over spicy Indian"], "concessions_requested": [] }, { "round_number": 2, "proposer": "B", "action": "accept", "proposal": { "summary": "AGREED: Jaan Thai Restaurant, Hill Road Bandra, tonight 8 PM", "details": { "restaurant": "Jaan Thai Restaurant", "cuisine": "Thai", "location": "Hill Road, Bandra West", "price_for_two": 1200, "time": "8:00 PM" }, "for_party_a": "Thai in Bandra — perfect match", "for_party_b": "Budget-friendly, vegetarian menu, 4.3 rating" }, "satisfaction_score": 88, "reasoning": "Perfect overlap. Both sides happy. Accepting.", "concessions_made": [], "concessions_requested": [] } ] }, # ───────────────────────────────────────────────────── # SCENARIO 3: Marketplace (PS5 Buy/Sell) # ───────────────────────────────────────────────────── "marketplace": { "feature_type": "marketplace", "rounds": [ { "round_number": 1, "proposer": "A", "action": "propose", "proposal": { "summary": "PS5 + 2 controllers + 3 games for ₹35,000. Pickup Andheri.", "details": {"item": "PS5 bundle", "price": 35000, "method": "pickup"}, "for_party_a": "Full asking price", "for_party_b": "Premium bundle" }, "satisfaction_score": 95, "reasoning": "Starting at asking price.", "concessions_made": [], "concessions_requested": ["Full price"] }, { "round_number": 2, "proposer": "B", "action": "counter", "proposal": { "summary": "PS5 bundle for ₹27,000. I'll pick up.", "details": {"item": "PS5 bundle", "price": 27000, "method": "pickup"}, "for_party_a": "Quick sale", "for_party_b": "Under budget" }, "satisfaction_score": 60, "reasoning": "Anchoring low.", "concessions_made": ["Pickup offered"], "concessions_requested": ["Lower price"] }, { "round_number": 3, "proposer": "A", "action": "counter", "proposal": { "summary": "PS5 bundle + original box for ₹31,000.", "details": {"item": "PS5 bundle + box", "price": 31000, "method": "pickup"}, "for_party_a": "Above minimum", "for_party_b": "Box adds resale value" }, "satisfaction_score": 72, "reasoning": "Dropped ₹4K, sweetened deal with box.", "concessions_made": ["₹35K→₹31K", "Added original box"], "concessions_requested": [] }, { "round_number": 4, "proposer": "B", "action": "accept", "proposal": { "summary": "AGREED: PS5 + 2 controllers + 3 games + box for ₹29,500. Pickup Andheri.", "details": { "item": "PS5 + 2 controllers + 3 games + original box", "price": 29500, "method": "pickup from Andheri", "settlement": {"payee_upi": "seller@upi", "payee_name": "Seller", "amount": 29500} }, "for_party_a": "Above ₹30K minimum", "for_party_b": "Full bundle under ₹30K" }, "satisfaction_score": 78, "reasoning": "Fair split. Bundle worth it.", "concessions_made": ["₹27K→₹29.5K"], "concessions_requested": [] } ] } } def get_mock_scenario(feature_type: str) -> dict: return MOCK_SCENARIOS.get(feature_type, MOCK_SCENARIOS["expenses"])