Ruby

# Create a calendar and a user
calendar = SD_Calendar.new(name: "Booking", color_theme: "blue")
john_doe = SD_User.new(name: "John Doe", email: "jd@example.com")
calendar.add_user(user: john_doe, role: :owner)

# Create an event
event = calendar.create_event(
  name: "Planning Meeting",
  description: "Scrum Standup",
  status: "scheduled",
  visibility: "private",
  color_theme: "purple",
  location: "Copenhagen HQ",
  start_time: "2025-09-10T08:00:00Z",
  end_time: "2025-09-10T08:20:00Z",
  recurrence_rule: "FREQ=WEEKLY;INTERVAL=2", # bi-weekly
  all_day: false,
  send_invitations: true
)

# List events in a date range
calendar.events(
  from: "2025-09-01T00:00:00Z",
  to:   "2025-09-30T23:59:59Z"
)

# Invite users to the event
users = [
  {email: "alice@example.com", role: :guest}, 
  {email: "bob@example.com", role: :guest},
  {email: "jane@example.com", role: :guest}
  ]
event.invite_users(users)

# Handle responses
event.accept_invitation(["alice@example.com", "bob@example.com"])
event.decline_invitation(["jane@example.com"])

# Postpone and cancel
event.postpone(2.hours, notify: true)
event.cancel(notify: true)

# Multiple calendars for the same user
john_doe.add_calendar(name: "Work", status: :public)
john_doe.add_calendar(name: "Family", status: :private)

# Fetch calendars
work_calendars = john_doe.calendars(status: :private) => [{calendar: calendar, name: "Family"}]
calendar = john_doe.get_calendar(name: "Work", status: :public)


# Find free time slots
john_doe.time_slots(
  start: Time.now.utc,
  end:   1.week.from_now,
  calendars: ["Work", "Family"]
)
# => [{ start: "2025-09-12T13:00:00Z", end: "2025-09-12T14:00:00Z" }]

# Book a meeting directly
john_doe.book_meeting(
  start: "2025-09-15T10:00:00Z",
  end:   "2025-09-15T11:00:00Z"
)

# Add a reminder to an event
event.add_reminder(
  minutes_before: 30,
  method: :email
)

# Same features for Tenants
hotel_royal = Tenant.new(name: "Hotel Royal")
room_101 = hotel_royal.add_calendar(name: "room 101")
room_102 = hotel_royal.add_calendar(name: "room 102")
room_102 = hotel_royal.add_calendar(name: "room 103")

booking = room_101.create_event(
  name: "Planning Meeting",
  ... 
)

room_101.get_event(booking.id)

room_101.delete_event(booking.id)
...