#!/bin/bash
# Build/fetch SQLite amalgamation for embedding
# Mirrors the rsync pattern: assets/sqlite_release_<os>_<arch>/

set -euo pipefail

SQLITE_VERSION="${SQLITE_VERSION:-3480000}"  # 3.48.0
SQLITE_YEAR="${SQLITE_YEAR:-2025}"
SQLITE_SRC_BASE="${SQLITE_SRC_BASE:-https://www.sqlite.org/${SQLITE_YEAR}}"
SQLITE_SHA256="${SQLITE_SHA256:-d9a15a42db7c78f88fe3d3c5945acce2f4bfe9e4da9f685cd19f6ea1d40aa884}"

os="$(uname -s | tr '[:upper:]' '[:lower:]')"
arch="$(uname -m)"
if [[ "${arch}" == "aarch64" || "${arch}" == "arm64" ]]; then arch="arm64"; fi
if [[ "${arch}" == "x86_64" ]]; then arch="x86_64"; fi

repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
out_dir="${repo_root}/src/assets/sqlite_${os}_${arch}"

echo "Fetching SQLite ${SQLITE_VERSION} for ${os}/${arch}..."

# Create platform-specific output directory
mkdir -p "${out_dir}"

# Download if not present
if [[ ! -f "${out_dir}/sqlite3.c" ]]; then
    echo "Fetching SQLite amalgamation..."
    tmp="$(mktemp -d)"
    cleanup() { rm -rf "${tmp}"; }
    trap cleanup EXIT
    
    url="${SQLITE_SRC_BASE}/sqlite-amalgamation-${SQLITE_VERSION}.zip"
    checksum_url="${url}.sha256"
    echo "Fetching ${url}"
    curl -fsSL "${url}" -o "${tmp}/sqlite.zip"
    
    # Fetch and verify SHA256 from official source
    if curl -fsSL "${checksum_url}" -o "${tmp}/sqlite.zip.sha256" 2>/dev/null; then
        expected_sha256="$(cat "${tmp}/sqlite.zip.sha256" | tr -d ' \n' | cut -d' ' -f1)"
        echo "verifying sha256 for ${url}"
        actual_sha256="$(sha256sum "${tmp}/sqlite.zip" | cut -d' ' -f1)"
        if [[ "${actual_sha256}" != "${expected_sha256}" ]]; then
            echo "build-sqlite: sha256 mismatch!" >&2
            echo "  expected: ${expected_sha256}" >&2
            echo "  actual:   ${actual_sha256}" >&2
            exit 2
        fi
        echo "${tmp}/sqlite.zip: OK"
    elif [[ -n "${SQLITE_SHA256}" ]]; then
        # Fallback to embedded SHA256 if official checksum unavailable
        echo "verifying sha256 (embedded fallback) for ${url}"
        actual_sha256="$(sha256sum "${tmp}/sqlite.zip" | cut -d' ' -f1)"
        if [[ "${actual_sha256}" != "${SQLITE_SHA256}" ]]; then
            echo "build-sqlite: sha256 mismatch!" >&2
            echo "  expected: ${SQLITE_SHA256}" >&2
            echo "  actual:   ${actual_sha256}" >&2
            exit 2
        fi
        echo "${tmp}/sqlite.zip: OK"
    else
        echo "build-sqlite: warning - no SHA256 verification available" >&2
    fi
    
    unzip -q "${tmp}/sqlite.zip" -d "${tmp}"
    mv "${tmp}/sqlite-amalgamation-${SQLITE_VERSION}"/* "${out_dir}/"
    
    echo "SQLite fetched to ${out_dir}"
else
    echo "SQLite already present at ${out_dir}"
fi

# Verify
if [[ -f "${out_dir}/sqlite3.c" && -f "${out_dir}/sqlite3.h" ]]; then
    echo "SQLite ready:"
    ls -lh "${out_dir}/sqlite3.c" "${out_dir}/sqlite3.h"
else
    echo "Error: SQLite files not found in ${out_dir}"
    exit 1
fi
