#!/usr/bin/env bash

[ -z "$XDG_CONFIG_HOME" ] && XDG_CONFIG_HOME="$HOME/.config"

CMD=/usr/bin/ani-cli
DEFAULT_DOWNLOAD="$HOME/Videos/sauce"
CFG_DIR="$XDG_CONFIG_HOME/aniwrapper"
DEFAULT_PLAYLIST="$CFG_DIR/playlists/playlist.txt"
CFG_FILE="meh.rasi"
VERBOSE=0

while getopts 'vh' OPT; do
	case "$OPT" in
	h)
		help_text
		;;
	v)
		VERBOSE=1
		;;
	*)
		log "Invalid option"
		exit 1
		;;
	esac
done

quit="6. Quit"
options="1. Stream|2. Download|3. Continue|4. Playlist|5. Sync History|$quit"

[ "$VERBOSE" -eq 1 ] && printf "%s\n" "CONFIG DIR: $CFG_DIR"

choice=$(echo "${options[@]}" | rofi -dmenu -sep '|' \
	-config "$CFG_DIR/$CFG_FILE" -l 6 -i -p "Aniwrapper")

seppuku() {
	printf "%s\n" "$*"
	exit 1
}

quit() {
	printf "%s\n" 'Quitting...'
	exit 0
}

run() {
	if [[ "$VERBOSE" -eq 0 ]]; then
		"$CMD" "$*"
	else
		"$CMD" -v "$*"
	fi
}

log() {
	if [[ "$VERBOSE" -eq 1 ]]; then
		printf "%s\n" "$*"
	fi
}

[ "$choice" == "$quit" ] && quit

selection=$(printf "%s\n" "$choice" | awk '{ print $1 }')

case "$selection" in
1.)
	# ---------------------------------------------------------------------------
	# streaming
	# ---------------------------------------------------------------------------
	log "Streaming mode"
	run
	;;
2.)
	# ---------------------------------------------------------------------------
	# download
	# ---------------------------------------------------------------------------
	log "Download anime"
	dl_dir=$(rofi -dmenu -config "$CFG_DIR/$CFG_FILE" \
		-l 1 -p "Enter download dir:")
	# if dl_dir is none set to current directory
	[ "$dl_dir" == "" ] && dl_dir="$DEFAULT_DOWNLOAD"
	run -d "$dl_dir"
	;;
3.)

	# ---------------------------------------------------------------------------
	# continue
	# ---------------------------------------------------------------------------
	log "Continue watching"
	run -H
	;;
4.)
	# ---------------------------------------------------------------------------
	# playlist mode
	# ---------------------------------------------------------------------------
	log "Playlist mode"
	options="1. Play playlist|2. Add to playlist|3. Delete from playlist|4. Quit"
	choice=$(printf "%s\n" "${options[@]}" |
		rofi -dmenu -sep '|' \
			-config "$CFG_DIR/$CFG_FILE" -l 4 -i -p "Enter choice:")
	[ -z "$choice" ] && seppuku "No choice selected"
	[ "$choice" == "$quit" ] && quit
	selection=$(printf "%s\n" "$choice" | awk '{ print $1 }')
	if [[ "$selection" == "1." ]]; then
		# ------------------------------------------------------------------
		# watch playlist
		# ------------------------------------------------------------------
		log "Playlist mode"
		options="1. From file|2. Streaming|3. Quit"
		choice=$(printf "%s\n" "${options[@]}" |
			rofi -dmenu -sep '|' \
				-config "$CFG_DIR/$CFG_FILE" -l 4 -i -p "Enter choice:")
		[ -z "$choice" ] && seppuku "No choice selected"
		[ "$choice" == "$quit" ] && quit
		log "Selection: $choice"
		selection=$(printf "%s\n" "$choice" | awk '{ print $1 }')
		if [[ "$selection" == "1." ]]; then
			# --------------------------------------------------------------
			# watch playlist from file (downloaded videos)
			# --------------------------------------------------------------
			log "Watching playlist from file"
			PLAYLIST_DIR="$HOME/Videos/sauce"
			log "Default playlist directory: $PLAYLIST_DIR"
			choice=$(cd "$PLAYLIST_DIR" && find . -mindepth 1 -type d |
				cut -c 3- |
				rofi -dmenu \
					-config "$CFG_DIR/$CFG_FILE" -l 5 -i -p "Choose playlist:")
			[ -z "$choice" ] && seppuku "No choice selected"
			log "Choice" "$choice"
			run -P "$PLAYLIST_DIR/$choice"
		elif [[ "$selection" == "2." ]]; then
			# --------------------------------------------------------------
			# watch playlist of 'queued' videos to stream
			# --------------------------------------------------------------
			log "Watching from 'queue'"
			choice=$(rofi -dmenu \
				-config "$CFG_DIR/$CFG_FILE" \
				-l 1 -p "Enter path to playlist file (or leave blank for default):")
			if [[ "$choice" ]]; then
				PLAYLIST_FILE="$choice"
			else
				PLAYLIST_FILE="$DEFAULT_PLAYLIST"
			fi
			run -p
		fi
	elif [[ "$selection" == "2." ]]; then
		# ------------------------------------------------------------------
		# add to playlist
		# ------------------------------------------------------------------
		log "Add to playlist"
		choice=$(rofi -dmenu \
			-config "$CFG_DIR/$CFG_FILE" \
			-l 1 -p "Enter path to playlist file (or leave blank for default):")
		if [[ "$choice" ]]; then
			PLAYLIST_FILE="$choice"
		else
			PLAYLIST_FILE="$DEFAULT_PLAYLIST"
		fi
		run -a "$PLAYLIST_FILE"
	elif [[ "$selection" == "3." ]]; then
		# -----------------------------------------------------------------------
		# delete from playlist
		# -----------------------------------------------------------------------
		log "Delete from playlist"
		choice=$(rofi -dmenu \
			-config "$CFG_DIR/$CFG_FILE" \
			-l 1 -p "Enter path to playlist file (or leave blank for default):")
		if [[ "$choice" ]]; then
			PLAYLIST_FILE="$choice"
		else
			PLAYLIST_FILE="$DEFAULT_PLAYLIST"
		fi
		[ "$VERBOSE" -eq 1 ] && log "playlist file: $PLAYLIST_FILE"
		lines=""
		cnt=0
		while read -r line; do
			if [[ "$cnt" -eq 0 ]]; then
				lines="$((cnt + 1)). $line"
			else
				lines="$lines|$((cnt + 1)). $line"
			fi
			((cnt++))
		done <"$PLAYLIST_FILE"
		choice=$(rofi -dmenu -l 12 \
			-sep '|' \
			-config "$CFG_DIR/$CFG_FILE" -p "Choose episode to delete:" \
			<<<"${lines[*]}")
		log "choice: $choice"
		selection=$(awk '{print $1}' <<<"$choice")
		idx=${selection//\./}
		log "index selected: $idx"
		log "deleting entry: $idx"
		if [[ -z "$idx" ]]; then
			log "no entry selected"
			exit 1
		fi
		sed -ie "$idx"d "$PLAYLIST_FILE"
		if [ "$?" -eq 0 ]; then
			log "$selection deleted from playlist"
			exit 0
		else
			log "there was a problem deleting $choice"
			exit 1
		fi
	fi
	;;
5.)
	log "Sync history database"
	# username=$(rofi -dmenu -config "$CFG_DIR/$CFG_FILE" \
	# 	-l 1 -p "Enter the username of the remote user:")
	# if [[ -z "$username" ]] || [[ "$username" == "" ]]; then
	# 	log "No username provided... exiting"
	# 	exit 1
	# fi
	# host=$(rofi -dmenu -config "$CFG_DIR/$CFG_FILE" \
	# 	-l 1 -p "Enter the host for the remote machine (eg 192.168.1.99):")
	# if [[ -z "$host" ]] || [[ "$host" == "" ]]; then
	# 	log "No host provided... exiting"
	# 	exit 1
	# fi
	# port=$(rofi -dmenu -config "$CFG_DIR/$CFG_FILE" \
	# 	-l 1 -p "Enter in the ssh port for remote machine or leave blank for default [22]:")
	# if [[ -z "$port" ]] || [[ "$port" == "" ]]; then
	# 	port=22
	# fi
	# keypath=$(rofi -dmenu -config "$CFG_DIR/$CFG_FILE" \
	# 	-l 1 -p "Enter path to private key (leave blank if not needed or if unsure):")

	printf "%s\n%s\n%d\n%s\n" "sudacode" "sudacode" 3005 "" | ani-cli -s
	# if [[ -z "$keypath" ]]; then
	# 	printf "%s\n%s\n%d\n%s\n" "$username" "$host" "$port" "" | ani-cli -s
	# else
	# 	printf "%s\n%s\n%d\n%s\n" "$username" "$host" "$port" "$keypath" | ani-cli -s
	# fi
	if [[ "$?" -ne 0 ]]; then
		log "Aniwrapper was unable to sync the databases..."
		exit 1
	else
		log "Databases synced successfully"
		exit 0
	fi
	;;
6.)
	# ---------------------------------------------------------------------------
	# get out
	# ---------------------------------------------------------------------------
	printf "%s\n" "Quitting..."
	exit 0
	;;
*)
	log "Invalid choice..."
	exit 1
	;;

esac
