import test from 'node:test';
import assert from 'node:assert/strict';
// db.ts throws without DATABASE_URL at import time; the postgres client connects lazily, so a dummy is harmless.
process.env.DATABASE_URL ??= 'postgres://test:test@127.0.0.1:1/test';
const { toBrowserSignedUrl } = await import('./ticketMediaService.js');

test('toBrowserSignedUrl rewrites internal Kong host to SUPABASE_PUBLIC_URL', () => {
  const prevUrl = process.env.SUPABASE_URL;
  const prevPub = process.env.SUPABASE_PUBLIC_URL;
  process.env.SUPABASE_URL = 'http://kong:8000';
  process.env.SUPABASE_PUBLIC_URL = 'http://localhost:8001';
  try {
    const signed =
      'http://kong:8000/storage/v1/object/sign/ticket-media/tickets/x/y.jpg?token=abc';
    assert.equal(
      toBrowserSignedUrl(signed),
      'http://localhost:8001/storage/v1/object/sign/ticket-media/tickets/x/y.jpg?token=abc',
    );
  } finally {
    if (prevUrl === undefined) delete process.env.SUPABASE_URL;
    else process.env.SUPABASE_URL = prevUrl;
    if (prevPub === undefined) delete process.env.SUPABASE_PUBLIC_URL;
    else process.env.SUPABASE_PUBLIC_URL = prevPub;
  }
});

test('toBrowserSignedUrl leaves URL unchanged when public matches internal', () => {
  const prevUrl = process.env.SUPABASE_URL;
  const prevPub = process.env.SUPABASE_PUBLIC_URL;
  process.env.SUPABASE_URL = 'http://localhost:8001';
  process.env.SUPABASE_PUBLIC_URL = 'http://localhost:8001';
  try {
    const signed = 'http://localhost:8001/storage/v1/object/sign/bucket/path?token=t';
    assert.equal(toBrowserSignedUrl(signed), signed);
  } finally {
    if (prevUrl === undefined) delete process.env.SUPABASE_URL;
    else process.env.SUPABASE_URL = prevUrl;
    if (prevPub === undefined) delete process.env.SUPABASE_PUBLIC_URL;
    else process.env.SUPABASE_PUBLIC_URL = prevPub;
  }
});
