import React from 'react';
// @ts-ignore
import { Pressable, Text, View } from 'react-native';
import FastImage from '@rocket.chat/react-native-fast-image';

import Check from '../../containers/Check';
import styles, { ROW_HEIGHT } from './styles';
import { themes } from '../../constants/colors';
import { isIOS } from '../../utils/deviceInfo';
import { withTheme } from '../../theme';

export { ROW_HEIGHT };

interface IServerItem {
	item: {
		id: string;
		iconURL: string;
		name: string;
	};
	onPress(): void;
	onLongPress(): void;
	hasCheck: boolean;
	theme: string;
}

const defaultLogo = require('../../static/images/logo.png');

const ServerItem = React.memo(({ item, onPress, onLongPress, hasCheck, theme }: IServerItem) => (
	<Pressable
		onPress={onPress}
		onLongPress={() => onLongPress?.()}
		testID={`rooms-list-header-server-${item.id}`}
		android_ripple={{
			color: themes[theme].bannerBackground
		}}
		style={({ pressed }: any) => ({
			backgroundColor: isIOS && pressed ? themes[theme].bannerBackground : themes[theme].backgroundColor
		})}>
		<View style={styles.serverItemContainer}>
			{item.iconURL ? (
				<FastImage
					source={{
						uri: item.iconURL,
						priority: FastImage.priority.high
					}}
					// @ts-ignore
					defaultSource={defaultLogo}
					style={styles.serverIcon}
					onError={() => console.log('err_loading_server_icon')}
				/>
			) : (
				<FastImage source={defaultLogo} style={styles.serverIcon} />
			)}
			<View style={styles.serverTextContainer}>
				<Text numberOfLines={1} style={[styles.serverName, { color: themes[theme].titleText }]}>
					{item.name || item.id}
				</Text>
				<Text numberOfLines={1} style={[styles.serverUrl, { color: themes[theme].auxiliaryText }]}>
					{item.id}
				</Text>
			</View>
			{hasCheck ? <Check theme={theme} /> : null}
		</View>
	</Pressable>
));

export default withTheme(ServerItem);
