from datetime import datetime, timezone, timedelta class MeetingUtils: def __init__(self): pass async def __aenter__(self): return self async def __aexit__(self, *args): pass async def get_millis_utc(self, dt: datetime): return int(dt.replace(tzinfo=timezone.utc).timestamp() * 1000) async def millis_to_datetime(self, millis, offset=0): dt_utc = datetime.fromtimestamp(millis / 1000, tz=timezone.utc) dt_offset = dt_utc + timedelta(hours=offset) # Apply timezone offset return dt_offset.strftime("%Y-%m-%d %H:%M:%S") async def check_availability(self, response, duration_ms, offset=0): availabilities = ( response["linkAvailability"]["linkAvailabilityByDuration"] .get(str(duration_ms), {}) .get("availabilities", []) ) available_slots = [] for slot in availabilities: start_time = await self.millis_to_datetime(slot["startMillisUtc"], offset) end_time = await self.millis_to_datetime(slot["endMillisUtc"], offset) available_slots.append({"start": start_time, "end": end_time}) return available_slots