import { BlockControls, MediaReplaceFlow } from '@wordpress/block-editor';
import { MenuItem, ToolbarGroup, ToolbarButton, TextControl } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
import LinkControl from '../../../components/link-control';
import { useDispatch } from '@wordpress/data';
import { createBlock } from '@wordpress/blocks';
import { useInnerBlocksCount } from '../../../hooks';
import getIcon from '../../../utils/get-icon';
import AlignmentControls from './AlignmentControls';

export default function ImageBlockControls( props ) {
	const {
		attributes,
		setAttributes,
		onSelectImage,
		onUploadError,
		onResetImage,
		imageUrl,
		canUploadImage,
		clientId,
		deviceType,
	} = props;

	const { mediaId, caption } = attributes;

	const { insertBlocks } = useDispatch( 'core/block-editor' );
	const innerBlocksCount = useInnerBlocksCount( clientId );

	return (
		<BlockControls>
			<AlignmentControls
				attributes={ attributes }
				setAttributes={ setAttributes }
				deviceType={ deviceType }
			/>

			{ 0 === innerBlocksCount &&
				<ToolbarGroup>
					<ToolbarButton
						className="gblocks-add-new-button"
						icon={ getIcon( 'caption' ) }
						label={ __( 'Add Caption', 'generateblocks' ) }
						onClick={ () => {
							insertBlocks( createBlock( 'generateblocks/headline', {
								element: 'figcaption',
								content: caption,
								isCaption: true,
							} ), undefined, clientId );
						} }
						showTooltip
					/>
				</ToolbarGroup>
			}

			{ !! imageUrl &&
				<ToolbarGroup>
					<LinkControl
						attributes={ attributes }
						setAttributes={ setAttributes }
					/>
				</ToolbarGroup>
			}

			{ !! imageUrl && canUploadImage &&
				<ToolbarGroup>
					<MediaReplaceFlow
						mediaId={ mediaId }
						mediaURL={ imageUrl }
						allowedTypes={ [ 'image' ] }
						accept="image/*"
						onSelect={ onSelectImage }
						onError={ onUploadError }
					>
						<>
							{ imageUrl && ! mediaId &&
								<div className="gb-image-replace-url">
									<TextControl
										label={ __( 'Image URL', 'generateblocks' ) }
										value={ imageUrl }
										onChange={ ( mediaUrl ) => setAttributes( { mediaUrl } ) }
									/>
								</div>
							}
							<MenuItem onClick={ onResetImage }>
								{ __( 'Reset' ) }
							</MenuItem>
						</>
					</MediaReplaceFlow>
				</ToolbarGroup>
			}
		</BlockControls>
	);
}