#!/bin/bash

################################################################################
# Plex Recent Additions Report Script
################################################################################
#
# Author: Peter Wood <peter@peterwood.dev>
# Description: Generates reports of recently added media items in Plex Media
#              Server by querying the library database directly. Provides
#              customizable time ranges and output formats.
#
# Features:
#   - Recent additions reporting (configurable time range)
#   - Library section filtering
#   - Formatted output with headers and columns
#   - Direct SQLite database querying
#   - Media type categorization
#
# Related Scripts:
#   - backup-plex.sh: Backs up the database queried by this script
#   - plex.sh: General Plex service management
#   - validate-plex-backups.sh: Validates database integrity
#   - monitor-plex-backup.sh: System monitoring
#
# Usage:
#   ./plex-recent-additions.sh         # Show additions from last 7 days
#   ./plex-recent-additions.sh 30      # Show additions from last 30 days
#   ./plex-recent-additions.sh --help  # Show usage information
#
# Dependencies:
#   - sqlite3 (for database queries)
#   - Plex Media Server with populated library
#   - Read access to Plex database files
#
# Exit Codes:
#   0 - Success
#   1 - Database not found or access denied
#   2 - Query execution failure
#
################################################################################

# Define the path to the Plex database
PLEX_DB="/var/lib/plexmediaserver/Library/Application Support/Plex Media Server/Plug-in Support/Databases/com.plexapp.plugins.library.db"

# Check if the database exists
if [ ! -f "$PLEX_DB" ]; then
    echo "Plex database not found at $PLEX_DB"
    exit 1
fi

# Query the database for items added in the last 7 days
sqlite3 "$PLEX_DB" <<EOF
.headers on
.mode column
SELECT
    datetime(meta.added_at, 'unixepoch', 'localtime') AS "added_at"
    , meta.title
    , meta.year
    , lib.section_type AS "library_section_type"
    , lib.name as "library_name"
FROM
    metadata_items meta
    left join library_sections lib on meta.library_section_id = lib.id
WHERE
    meta.added_at >= strftime('%s', 'now', '-7 days')

ORDER BY meta.added_at DESC;
EOF
