#!/usr/bin/osascript

# Dependencies:
# MeetingBar: https://github.com/leits/MeetingBar

# Recommended installation:
# brew install --cask meetingbar

# Required parameters:
# @raycast.schemaVersion 1
# @raycast.title Join Meeting
# @raycast.mode silent

# Optional parameters:
# @raycast.icon images/meetingbar.png
# @raycast.packageName MeetingBar

# Documentation:
# @raycast.author Jakub Lanski
# @raycast.authorURL https://github.com/jaklan
# @raycast.description Join the ongoing or upcoming meeting.

on run
	
	try
		runMeetingBar()
		joinMeeting()
		return
		
	on error errorMessage
		closeMenu()
		return errorMessage
		
	end try
	
end run

### Functions ###

on joinMeeting()
	openMenu()
	tell application "System Events" to tell application process "MeetingBar"
		tell menu 1 of menu bar item 1 of menu bar 2
			if menu item "Join current event meeting" exists then
				click menu item "Join current event meeting"
			else if menu item "Join next event meeting" exists then
				click menu item "Join next event meeting"
			else
				error "No meetings found"
			end if
		end tell
	end tell
end joinMeeting

on MeetingBarIsRunning()
	return application "MeetingBar" is running
end MeetingBarIsRunning

on runMeetingBar()
	if not MeetingBarIsRunning() then do shell script "open -a 'MeetingBar'"
end runMeetingBar

on menuIsOpen()
	tell application "System Events" to tell application process "MeetingBar"
		return menu 1 of menu bar item 1 of menu bar 2 exists
	end tell
end menuIsOpen

on openMenu()
	set killDelay to 0
	repeat
		tell application "System Events" to tell application process "MeetingBar"
			if my menuIsOpen() then return
			ignoring application responses
				click menu bar item 1 of menu bar 2
			end ignoring
		end tell
		set killDelay to killDelay + 0.1
		delay killDelay
		do shell script "killall System\\ Events"
	end repeat
end openMenu

on closeMenu()
	if menuIsOpen() then tell application "System Events" to key code 53
end closeMenu