import { type Image } from 'react-native-image-crop-picker';

import { forceJpgExtension } from './forceJpgExtension';

const attachment: Image = {
	exif: null,
	filename: 'IMG_0040.PNG',
	path: 'tmp/temp',
	height: 534,
	width: 223,
	data: null,
	modificationDate: '1643984790',
	localIdentifier: 'device/L0/001',
	size: 16623,
	sourceURL: '',
	mime: 'image/jpeg',
	cropRect: null,
	creationDate: '1641490665'
};

describe('forceJpgExtension for iOS', () => {
	jest.mock('react-native', () => ({ Platform: { OS: 'ios' } }));
	describe('with mime as image/jpeg', () => {
		test('filename.jpg should be filename.jpg', () => {
			const newAttachment = attachment;
			newAttachment.filename = 'filename.jpg';
			const file = forceJpgExtension(newAttachment);

			expect(file.filename).toBe('filename.jpg');
		});
		test('filename.png should be filename.jpg', () => {
			const newAttachment = attachment;
			newAttachment.filename = 'filename.png';
			const file = forceJpgExtension(newAttachment);

			expect(file.filename).toBe('filename.jpg');
		});
		test('filename.jpeg should be filename.jpg', () => {
			const newAttachment = attachment;
			newAttachment.filename = 'filename.jpeg';
			const file = forceJpgExtension(newAttachment);

			expect(file.filename).toBe('filename.jpg');
		});
		test('filename.heic should be filename.jpg', () => {
			const newAttachment = attachment;
			newAttachment.filename = 'filename.heic';
			const file = forceJpgExtension(newAttachment);

			expect(file.filename).toBe('filename.jpg');
		});
	});
	describe('with mime different', () => {
		test('filename.jpg should be filename.jpg', () => {
			const newAttachment = attachment;
			newAttachment.filename = 'filename.png';
			newAttachment.mime = 'image/png';
			const file = forceJpgExtension(newAttachment);

			expect(file.filename).toBe('filename.png');
		});
	});
});

describe('forceJpgExtension for android', () => {
	jest.mock('react-native', () => ({ Platform: { OS: 'android' } }));
	describe('with mime as image/jpeg', () => {
		test('filename.jpg should be filename.jpg', () => {
			const newAttachment = attachment;
			newAttachment.filename = 'filename.jpg';
			const file = forceJpgExtension(newAttachment);

			expect(file.filename).toBe('filename.jpg');
		});
		test('filename.png should be filename.png', () => {
			const newAttachment = attachment;
			newAttachment.filename = 'filename.png';
			const file = forceJpgExtension(newAttachment);

			expect(file.filename).toBe('filename.png');
		});
		test('filename.jpeg should be filename.jpeg', () => {
			const newAttachment = attachment;
			newAttachment.filename = 'filename.jpeg';
			const file = forceJpgExtension(newAttachment);

			expect(file.filename).toBe('filename.jpeg');
		});
		test('filename.heic should be filename.heic', () => {
			const newAttachment = attachment;
			newAttachment.filename = 'filename.heic';
			const file = forceJpgExtension(newAttachment);

			expect(file.filename).toBe('filename.heic');
		});
	});
	describe('with mime different', () => {
		test('filename.jpg should be filename.jpg', () => {
			const newAttachment = attachment;
			newAttachment.filename = 'filename.png';
			newAttachment.mime = 'image/png';
			const file = forceJpgExtension(newAttachment);

			expect(file.filename).toBe('filename.png');
		});
	});
});
