File size: 2,146 Bytes
59ce1e2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
"""Agent 4 — Booking Agent (writes to data/bookings.json)"""
import json, uuid, os
from datetime import datetime, timedelta
from pathlib import Path

BOOKINGS_FILE = Path(__file__).parent.parent / "data" / "bookings.json"

TIME_SLOT_MAP = {
    "morning": ["09:00", "10:00", "11:00"],
    "afternoon": ["13:00", "14:00", "15:00"],
    "evening": ["17:00", "18:00", "19:00"],
    "asap": ["09:00", "10:00", "11:00", "13:00", "14:00"],
}

def pick_slot(provider: dict, requested_time: str) -> str:
    available = provider.get("available_slots", [])
    rt = (requested_time or "").lower()
    for key, slots in TIME_SLOT_MAP.items():
        if key in rt:
            for s in slots:
                if s in available:
                    return s
    return available[0] if available else "10:00"

def run(recommendation: dict, intent: dict) -> dict:
    provider = recommendation.get("best_provider")
    if not provider:
        return {"error": "No provider available to book."}

    slot        = pick_slot(provider, intent.get("time", "morning"))
    booking_id  = f"BK-{datetime.now().strftime('%Y%m%d')}-{str(uuid.uuid4())[:5].upper()}"
    remind_time = f"{int(slot.split(':')[0]) - 1:02d}:{slot.split(':')[1]}"
    booked_date = (datetime.now() + timedelta(days=1)).strftime("%A, %d %b %Y")

    record = {
        "booking_id":     booking_id,
        "provider_id":    provider["provider_id"],
        "provider_name":  provider["name"],
        "service":        intent.get("service_type"),
        "location":       intent.get("location"),
        "confirmed_slot": slot,
        "booked_date":    booked_date,
        "provider_phone": provider.get("phone"),
        "reminder_time":  remind_time,
        "created_at":     datetime.now().isoformat(),
        "status":         "confirmed",
    }

    # Write to bookings.json
    try:
        existing = json.loads(BOOKINGS_FILE.read_text()) if BOOKINGS_FILE.exists() else []
        existing.append(record)
        BOOKINGS_FILE.write_text(json.dumps(existing, indent=2))
    except Exception:
        pass   # HF free tier ephemeral filesystem — non-fatal

    return record