#!/usr/bin/env bash

set -e

# Usage: ./to_epoch.sh <YYYY/MM/DD|YYYY/MM/DD:HH:MM:SS> [TIMEZONE]

INPUT_STAMP="$1"
TARGET_TZ="${2:-UTC}"

if [ -z "$INPUT_STAMP" ]; then
    echo "Usage: $0 <YYYY/MM/DD|YYYY/MM/DD:HH:MM:SS> [TIMEZONE]"
    echo "Examples:"
    echo "  $0 2026/12/31"
    echo "  $0 2026/12/31:18:30:00"
    echo "  $0 2026/12/31:18:30:00 America/New_York"
    exit 1
fi

# Extract date and time parts
if [[ "$INPUT_STAMP" == *":"* ]]; then
    # Splits on the first colon separating the date from time
    DATE_PART="${INPUT_STAMP%%:*}"
    TIME_PART="${INPUT_STAMP#*:}"
else
    DATE_PART="$INPUT_STAMP"
    TIME_PART="23:59:59"
fi

DATETIME_STR="${DATE_PART} ${TIME_PART}"

# Detect GNU date vs BSD/macOS date
if date --version >/dev/null 2>&1; then
    # GNU date (Ubuntu, Rocky, SLES)
    EPOCH=$(TZ="$TARGET_TZ" date -d "$DATETIME_STR" +%s 2>/dev/null)
else
    # BSD / macOS date
    EPOCH=$(TZ="$TARGET_TZ" date -j -f "%Y/%m/%d %H:%M:%S" "$DATETIME_STR" +%s 2>/dev/null)
fi

if [ -z "$EPOCH" ]; then
    echo "Error: Failed to parse date string '$INPUT_STAMP'. Ensure format is YYYY/MM/DD or YYYY/MM/DD:HH:MM:SS." >&2
    exit 1
fi

echo "$EPOCH"
