import { getPlantImageSourceFallbackUri, tryResolveImageUri } from '../../utils/imageUri';

describe('imageUri utilities', () => {
  const originalApiUrl = process.env.EXPO_PUBLIC_API_URL;
  const originalBackendUrl = process.env.EXPO_PUBLIC_BACKEND_URL;

  beforeEach(() => {
    process.env.EXPO_PUBLIC_API_URL = 'http://localhost:3000/api';
    delete process.env.EXPO_PUBLIC_BACKEND_URL;
  });

  afterEach(() => {
    process.env.EXPO_PUBLIC_API_URL = originalApiUrl;
    process.env.EXPO_PUBLIC_BACKEND_URL = originalBackendUrl;
  });

  it('resolves local plant asset paths against the API host', () => {
    expect(tryResolveImageUri('/plants/monstera.webp')).toBe('http://localhost:3000/plants/monstera.webp');
    expect(tryResolveImageUri('plants/aloe-vera-thumb.webp')).toBe('http://localhost:3000/plants/aloe-vera-thumb.webp');
  });

  it('rejects invalid local paths outside the plants directory', () => {
    expect(tryResolveImageUri('/uploads/monstera.webp')).toBeNull();
    expect(tryResolveImageUri('../plants/monstera.webp')).toBeNull();
  });

  it('resolves local plant asset paths against EXPO_PUBLIC_BACKEND_URL when API_URL is absent', () => {
    delete process.env.EXPO_PUBLIC_API_URL;
    process.env.EXPO_PUBLIC_BACKEND_URL = 'https://backend.example.com';

    expect(tryResolveImageUri('/plants/rose.webp')).toBe('https://backend.example.com/plants/rose.webp');
  });

  it('falls back from a missing local asset to the manifest-backed source image', () => {
    expect(getPlantImageSourceFallbackUri('/plants/rosa-x-hybrida--rose--7375780c.webp')).toMatch(/^https?:\/\//);
  });
});
