import { vol } from 'memfs';

import { getAndroidSplashConfig } from '../getAndroidSplashConfig';
import { setSplashImageDrawablesAsync } from '../withAndroidSplashImages';

jest.mock('fs');

jest.mock('@expo/image-utils', () => ({
  generateImageAsync: jest.fn().mockResolvedValue({ source: Buffer.from('...') }),
  compositeImagesAsync: jest.fn().mockResolvedValue(Buffer.from('...')),
  generateImageBackgroundAsync: jest.fn().mockResolvedValue(Buffer.from('...')),
}));

describe(setSplashImageDrawablesAsync, () => {
  beforeEach(async () => {
    vol.fromJSON(
      {
        '/assets/splash.png': '...',
        '/assets/splash-dark.png': '...',
      },
      '/'
    );
  });

  afterEach(async () => {
    vol.reset();
  });

  it(`sets all images`, async () => {
    await setSplashImageDrawablesAsync(
      getAndroidSplashConfig({
        android: {
          resizeMode: 'contain',
          backgroundColor: '#ff0000',
          imageWidth: 100,
          mdpi: '/assets/splash.png',
          hdpi: '/assets/splash.png',
          xhdpi: '/assets/splash.png',
          xxhdpi: '/assets/splash.png',
          xxxhdpi: '/assets/splash.png',
          dark: {
            backgroundColor: '#ff00ff',
            mdpi: '/assets/splash-dark.png',
            hdpi: '/assets/splash-dark.png',
            xhdpi: '/assets/splash-dark.png',
            xxhdpi: '/assets/splash-dark.png',
            xxxhdpi: '/assets/splash-dark.png',
          },
        },
      }),
      '/'
    );

    const images = [
      '/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png',
      // Dark images
      '/android/app/src/main/res/drawable-night-mdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-hdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-xhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-xxhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-xxxhdpi/splashscreen_logo.png',
    ];
    const results = vol.toJSON();
    // expect(results).toBe({});
    for (const image of images) {
      expect(results[image]).toBe('...');
    }
  });
  it(`sets minimal images`, async () => {
    await setSplashImageDrawablesAsync(
      getAndroidSplashConfig({
        resizeMode: 'contain',
        backgroundColor: '#ff0000',
        imageWidth: 100,
        image: '/assets/splash.png',
        dark: {
          backgroundColor: '#ff00ff',
          image: '/assets/splash-dark.png',
        },
      }),
      '/'
    );

    const images = [
      '/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png',
      // Dark logos
      '/android/app/src/main/res/drawable-night-mdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-hdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-xhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-xxhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-xxxhdpi/splashscreen_logo.png',
    ];
    const results = vol.toJSON();
    // expect(results).toBe({});
    for (const image of images) {
      expect(results[image]).toBe('...');
    }
  });
  it(`sets no images`, async () => {
    await setSplashImageDrawablesAsync(
      getAndroidSplashConfig({
        resizeMode: 'contain',
        backgroundColor: '#ff0000',
        imageWidth: 100,
      }),
      './'
    );

    const images = [
      '/android/app/src/main/res/drawable-mdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-hdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-xhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-xxhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-xxxhdpi/splashscreen_logo.png',
      // Dark logos
      '/android/app/src/main/res/drawable-night-mdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-hdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-xhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-xxhdpi/splashscreen_logo.png',
      '/android/app/src/main/res/drawable-night-xxxhdpi/splashscreen_logo.png',
    ];
    const results = vol.toJSON();
    for (const image of images) {
      expect(results[image]).not.toBeDefined();
    }
  });
});
