#!/bin/sh
err()
{
	printf "%s: %s\n" "${0##*/}" "$*" >&2
	exit 1
}

warn()
{
	printf "%s: %s\n" "${0##*/}" "$*" >&2
}

check_required_programs()
{
	_rc=0
	for _prog; do
		if ! command -v "$_prog" >/dev/null; then
			_rc=1
			warn "$_prog: not found"
		fi
	done
	return $_rc;
}

set -eu

check_required_programs sqlite3 dbicdump || exit 1

sqlite3 "db/PoorBooru.db" <<'_SQL'
PRAGMA foreig_keys = ON;

CREATE TABLE IF NOT EXISTS media(
	media_id INTEGER PRIMARY KEY,
	content BLOB (10485760) NOT NULL,
	filename TEXT (255) NOT NULL,
	content_type TEXT (255)
);

CREATE TABLE IF NOT EXISTS tags(
	tag_id INTEGER PRIMARY KEY,
	name TEXT (255) NOT NULL UNIQUE
);

CREATE TABLE IF NOT EXISTS media_tags(
	media_id INTEGER NOT NULL,
	tag_id INTEGER NOT NULL,
	FOREIGN KEY (media_id) REFERENCES media (media_id) ON DELETE CASCADE,
	FOREIGN KEY (tag_id) REFERENCES tags (tag_id) ON DELETE CASCADE,
	PRIMARY KEY(media_id, tag_id)
);

CREATE VIEW IF NOT EXISTS tags_count_view AS SELECT
	tags.tag_id AS tag_id,
	tags.name AS name,
	COUNT(media_tags.media_id) AS count
FROM tags
	INNER JOIN media_tags USING (tag_id)
	GROUP BY tag_id;

_SQL

dbicdump -o dump_directory=./lib PoorBooru::Schema dbi:SQLite:db/PoorBooru.db