-- Migration: 047_optimize_job_indexes
-- Description: Creates an immutable wrapper function and a compound index to dramatically optimize the default sorting on the Homepage.
-- Removing the heavy Table Scan calculations for `ORDER BY j.is_featured DESC, COALESCE(j.date_posted, j.created_at) DESC`.

-- 1. Create an immutable function wrapper for COALESCE because PostgreSQL forbids volatile timestamps in indexes
CREATE OR REPLACE FUNCTION immutable_coalesce_dates(d1 timestamp with time zone, d2 timestamp without time zone)
RETURNS timestamp with time zone AS $$
BEGIN
    RETURN COALESCE(d1, d2 AT TIME ZONE 'UTC');
END;
$$ LANGUAGE plpgsql IMMUTABLE;

-- 2. Create the precise index using the new immutable function
CREATE INDEX IF NOT EXISTS idx_jobs_featured_date_posted 
ON jobs (is_featured DESC, immutable_coalesce_dates(date_posted, created_at) DESC);

-- 3. Also index jobs creation date explicitly if they search strictly by recents without features
CREATE INDEX IF NOT EXISTS idx_jobs_coalesce_date_posted
ON jobs (immutable_coalesce_dates(date_posted, created_at) DESC);
