#!/bin/sh
# questions - capture questions via dmenu into a SQLite database
# Usage: questions [-l | -c | -d | -s TERM]

DB="${XDG_CONFIG_HOME:-$HOME/.config}/scripts/scripts.db"

# Initialize DB/table if needed
mkdir -p "$(dirname "$DB")"
sqlite3 "$DB" "CREATE TABLE IF NOT EXISTS questions (
	id INTEGER PRIMARY KEY AUTOINCREMENT,
	question TEXT NOT NULL,
	created_at TEXT DEFAULT (datetime('now', 'localtime'))
);"

cmd_add() {
	question=$(printf '' | dmenu -c -l 1 -h 40 -p "Question:" || exit 0)
	[ -z "$question" ] && exit 0
	sqlite3 "$DB" "INSERT INTO questions (question) VALUES ('$(printf '%s' "$question" | sed "s/'/''/g")');"
	notify-send "Question saved" "$question"
}

cmd_list() {
	printf '\033[1m%-5s %-19s %s\033[0m\n' "ID" "DATE" "QUESTION"
	printf '%-5s %-19s %s\n' "-----" "-------------------" "---"
	sqlite3 -separator '|' "$DB" "SELECT id, question, created_at FROM questions ORDER BY id;" | while IFS='|' read -r id question date; do
		printf '\033[33m%-5s\033[0m \033[2m%-19s\033[0m %s\n' "$id" "$date" "$question"
	done
}

cmd_count() {
	n=$(sqlite3 "$DB" "SELECT COUNT(*) FROM questions;")
	printf '%s questions\n' "$n"
}

cmd_delete() {
	id="$1"
	if [ -z "$id" ]; then
		# Interactive: pick from dmenu
		selected=$(sqlite3 -separator ' | ' "$DB" "SELECT id, question FROM questions ORDER BY id;" | dmenu -c -l 20 -p "Delete:")
		[ -z "$selected" ] && exit 0
		id=$(printf '%s' "$selected" | cut -d'|' -f1 | tr -d ' ')
	fi
	sqlite3 "$DB" "DELETE FROM questions WHERE id = $id;"
	printf 'Deleted question %s\n' "$id"
}

cmd_search() {
	term="$1"
	[ -z "$term" ] && { printf 'Usage: questions -s TERM\n'; exit 1; }
	escaped=$(printf '%s' "$term" | sed "s/'/''/g")
	printf '\033[1m%-5s %-19s %s\033[0m\n' "ID" "DATE" "QUESTION"
	printf '%-5s %-19s %s\n' "-----" "-------------------" "---"
	sqlite3 -separator '|' "$DB" "SELECT id, question, created_at FROM questions WHERE question LIKE '%$escaped%' ORDER BY id;" | while IFS='|' read -r id question date; do
		printf '\033[33m%-5s\033[0m \033[2m%-19s\033[0m %s\n' "$id" "$date" "$question"
	done
}

case "$1" in
	-l|list)    cmd_list ;;
	-c|count)   cmd_count ;;
	-d|delete)  cmd_delete "$2" ;;
	-s|search)  cmd_search "$2" ;;
	-h|help)
		printf 'questions          Ask a question (dmenu)\n'
		printf 'questions -l       List all questions\n'
		printf 'questions -c       Count questions\n'
		printf 'questions -d [ID]  Delete a question (dmenu picker or by ID)\n'
		printf 'questions -s TERM  Search questions\n'
		;;
	"")         cmd_add ;;
	*)          printf 'Unknown flag: %s (try questions -h)\n' "$1" ;;
esac
