#!/bin/zsh
# Dropbox Opener for Mac: run once per Mac.
set -euo pipefail

APP="$HOME/Applications/Dropbox Opener.app"
PLIST="$APP/Contents/Info.plist"

mkdir -p "$HOME/Applications"
rm -rf "$APP"

osacompile -o "$APP" -e 'on open location theURL
	do shell script "/bin/zsh " & quoted form of (POSIX path of (path to me) & "Contents/Resources/reveal.sh") & " " & quoted form of theURL
end open location'

cat > "$APP/Contents/Resources/reveal.sh" <<'EOF'
#!/bin/zsh
rel="${1#tgdropbox:}"
rel=$(printf '%b' "${rel//\%/\\x}")
# business.root_path is the team root ("Too Gallus Dropbox"); business.path is only the member folder inside it.
for key in business.root_path personal.path; do
  root=$(plutil -extract "$key" raw -o - "$HOME/.dropbox/info.json" 2>/dev/null) || continue
  if [[ -e "$root/$rel" ]]; then
    open -R "$root/$rel"
    exit 0
  fi
done
osascript -e 'on run argv' -e 'display alert "Not found in your Dropbox" message (item 1 of argv)' -e 'end run' "$rel"
EOF

cat > "$APP/Contents/Resources/copy-link.sh" <<'EOF'
#!/bin/zsh
# Finder right-click > Copy Dropbox Opener Link: puts one link per selected item on the clipboard.
links=()
for f in "$@"; do
  rel=""
  for key in business.root_path personal.path; do
    root=$(plutil -extract "$key" raw -o - "$HOME/.dropbox/info.json" 2>/dev/null) || continue
    if [[ "$f" == "$root/"* ]]; then rel="${f#$root/}"; break; fi
  done
  if [[ -z "$rel" ]]; then
    osascript -e 'on run argv' -e 'display alert "Not inside your Dropbox" message (item 1 of argv)' -e 'end run' "$f"
    exit 1
  fi
  enc=$(osascript -l JavaScript -e 'function run(a) { return encodeURIComponent(a[0].normalize("NFC")).replace(/'"'"'/g, "%27") }' "$rel")
  links+=("https://files.toogallus.com/#$enc")
done
print -rn -- "${(F)links}" | pbcopy
EOF

SERVICE="$HOME/Library/Services/Copy Dropbox Opener Link.workflow"
rm -rf "$SERVICE"
mkdir -p "$SERVICE/Contents"

cat > "$SERVICE/Contents/Info.plist" <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>NSServices</key>
	<array>
		<dict>
			<key>NSMenuItem</key>
			<dict><key>default</key><string>Copy Dropbox Opener Link</string></dict>
			<key>NSMessage</key><string>runWorkflowAsService</string>
			<key>NSRequiredContext</key>
			<dict><key>NSApplicationIdentifier</key><string>com.apple.finder</string></dict>
			<key>NSSendFileTypes</key>
			<array><string>public.item</string></array>
		</dict>
	</array>
</dict>
</plist>
EOF

cat > "$SERVICE/Contents/document.wflow" <<'EOF'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>AMApplicationBuild</key><string>528</string>
	<key>AMApplicationVersion</key><string>2.10</string>
	<key>AMDocumentVersion</key><string>2</string>
	<key>actions</key>
	<array>
		<dict>
			<key>action</key>
			<dict>
				<key>AMAccepts</key>
				<dict>
					<key>Container</key><string>List</string>
					<key>Optional</key><true/>
					<key>Types</key><array><string>com.apple.cocoa.string</string></array>
				</dict>
				<key>AMActionVersion</key><string>2.0.3</string>
				<key>AMApplication</key><array><string>Automator</string></array>
				<key>AMParameterProperties</key>
				<dict>
					<key>COMMAND_STRING</key><dict/>
					<key>CheckedForUserDefaultShell</key><dict/>
					<key>inputMethod</key><dict/>
					<key>shell</key><dict/>
					<key>source</key><dict/>
				</dict>
				<key>AMProvides</key>
				<dict>
					<key>Container</key><string>List</string>
					<key>Types</key><array><string>com.apple.cocoa.string</string></array>
				</dict>
				<key>ActionBundlePath</key><string>/System/Library/Automator/Run Shell Script.action</string>
				<key>ActionName</key><string>Run Shell Script</string>
				<key>ActionParameters</key>
				<dict>
					<key>COMMAND_STRING</key><string>/bin/zsh "$HOME/Applications/Dropbox Opener.app/Contents/Resources/copy-link.sh" "$@"</string>
					<key>CheckedForUserDefaultShell</key><true/>
					<key>inputMethod</key><integer>1</integer>
					<key>shell</key><string>/bin/zsh</string>
					<key>source</key><string></string>
				</dict>
				<key>BundleIdentifier</key><string>com.apple.RunShellScript</string>
				<key>CFBundleVersion</key><string>2.0.3</string>
				<key>CanShowSelectedItemsWhenRun</key><false/>
				<key>CanShowWhenRun</key><true/>
				<key>Category</key><array><string>AMCategoryUtilities</string></array>
				<key>Class Name</key><string>RunShellScriptAction</string>
				<key>InputUUID</key><string>6D9A8F2C-3E1B-4B57-9C0A-1F2E3D4C5B6A</string>
				<key>OutputUUID</key><string>7E0B9A3D-4F2C-4C68-8D1B-2A3F4E5D6C7B</string>
				<key>UUID</key><string>8F1CAB4E-5A3D-4D79-9E2C-3B4A5F6E7D8C</string>
				<key>UnlocalizedApplications</key><array><string>Automator</string></array>
				<key>isViewVisible</key><integer>1</integer>
			</dict>
			<key>isViewVisible</key><integer>1</integer>
		</dict>
	</array>
	<key>connectors</key><dict/>
	<key>workflowMetaData</key>
	<dict>
		<key>serviceApplicationBundleID</key><string>com.apple.finder</string>
		<key>serviceApplicationPath</key><string>/System/Library/CoreServices/Finder.app</string>
		<key>serviceInputTypeIdentifier</key><string>com.apple.Automator.fileSystemObject</string>
		<key>serviceOutputTypeIdentifier</key><string>com.apple.Automator.nothing</string>
		<key>serviceProcessesInput</key><integer>0</integer>
		<key>workflowTypeIdentifier</key><string>com.apple.Automator.servicesMenu</string>
	</dict>
</dict>
</plist>
EOF

/System/Library/CoreServices/pbs -update

/usr/libexec/PlistBuddy \
  -c "Add :CFBundleURLTypes array" \
  -c "Add :CFBundleURLTypes:0 dict" \
  -c "Add :CFBundleURLTypes:0:CFBundleURLName string Dropbox Opener" \
  -c "Add :CFBundleURLTypes:0:CFBundleURLSchemes array" \
  -c "Add :CFBundleURLTypes:0:CFBundleURLSchemes:0 string tgdropbox" \
  -c "Add :LSUIElement bool true" \
  "$PLIST"

codesign --force --deep -s - "$APP"
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f "$APP"

echo "Dropbox Opener installed."
