#!/usr/bin/env bash
set -euo pipefail

site="/var/www/chriswere.wales/movies"
csv="$site/movies.csv"
delim="|"
index="$site/index.html"
recent="$site/recent.html"
year="$site/year.html"
title="$site/title.html"

[[ -f "$csv" ]] || { echo "Missing CSV: $csv"; exit 1; }

header() {
cat <<EOF
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Movies</title>
<link rel="stylesheet" href="../style.css">
<link rel="stylesheet" href="style.css">
</head>
<body>
<header><a href="/">chriswere.wales</a></header>
<h1>TV show and movie ratings</h1>
<p>📅 Page generated: $(date '+%-d %B %Y')</p>
<nav>
<a href="/movies/">Rating</a> •
<a href="/movies/recent.html">Recent</a> •
<a href="/movies/year.html">Year</a> •
<a href="/movies/title.html">Title</a>
</nav>
EOF
}

footer() {
    echo "</body></html>"
}

table_body() {
    awk -F"$delim" '
    {
        printf "<tr>"
        for (i=1;i<=NF;i++) printf "<td>%s</td>", $i
        printf "</tr>\n"
    }'
}

build_rating() {
    tail -n +2 "$csv" | sort -t"$delim" -k4,4nr | cut -d"$delim" -f2-
}

build_recent() {
    tail -n +2 "$csv" | sort -t"$delim" -k1,1r | cut -d"$delim" -f2-
}

build_year() {
    tail -n +2 "$csv" | sort -t"$delim" -k3,3nr | cut -d"$delim" -f2-
}

build_title() {
    tail -n +2 "$csv" | sort -t"$delim" -k2,2 | cut -d"$delim" -f2-
}

render() {
    out="$1"
    heading="$2"
    cmd="$3"

    {
        header
        echo "<h2>$heading</h2>"
        echo "<table>"
        $cmd | table_body
        echo "</table>"
        footer
    } > "$out"
}

generate() {
    render "$index" "By rating" build_rating
    render "$recent" "By review date" build_recent
    render "$year" "By release year" build_year
    render "$title" "By title" build_title
    echo "Pages generated"
}

add() {
    read -rp "Title: " title
    read -rp "Year: " year
    read -rp "Score: " score
    
    # Category menu
    echo
    echo "Category:"
    PS3="Choose a category: "
    select category in \
        "TV series" \
        "Film" \
        "Video series" \
        "Podcast"
    do
        [[ -n "$category" ]] && break
        echo "Please choose"
    done
    echo
    
    echo "$(date +%F)$delim$title$delim$year$delim$score$delim$category" >> "$csv"
    exec "$0" gen
}

del() {
    sed -i '$d' "$csv"
    exec "$0" gen
}

edit() {
    "${EDITOR:-nano}" "$csv"
    "$0" gen
}

case "${1:-}" in
    add) add ;;
    del) del ;;
    gen) generate ;;
    ed) edit ;;
    *)
        echo "Usage:"
        echo "  movie add"
        echo "  movie del"
        echo "  movie gen"
        echo "  movie ed"
        ;;
esac
