import { Fragment } from '@wordpress/element';
import { __ } from '@wordpress/i18n';
import { SelectControl } from '@wordpress/components';
import { applyFilters } from '@wordpress/hooks';
import NumberControl from '../../../components/number-control';

export default ( props ) => {
	const {
		attributes,
		state,
		deviceType,
		setAttributes,
	} = props;

	const {
		verticalAlignment,
		verticalAlignmentTablet,
		verticalAlignmentMobile,
		horizontalAlignment,
		horizontalAlignmentTablet,
		horizontalAlignmentMobile,
	} = attributes;

	return (
		<>
			<NumberControl
				{ ...props }
				label={ __( 'Horizontal Gap', 'generateblocks' ) }
				attributeName="horizontalGap"
				unit="px"
				units={ [ 'px' ] }
				device={ deviceType }
				presets={
					[
						{
							unit: 'px',
							data: [ 20, 40, 60, 80 ],
						},
					]
				}
			/>

			<NumberControl
				{ ...props }
				label={ __( 'Vertical Gap', 'generateblocks' ) }
				attributeName="verticalGap"
				unit="px"
				units={ [ 'px' ] }
				device={ deviceType }
				presets={
					[
						{
							unit: 'px',
							data: [ 20, 40, 60, 80 ],
						},
					]
				}
			/>

			{ 'Desktop' === deviceType && (
				<Fragment>
					<SelectControl
						label={ __( 'Vertical Alignment', 'generateblocks' ) }
						value={ verticalAlignment }
						options={ [
							{ label: __( 'Default', 'generateblocks' ), value: '' },
							{ label: __( 'Top', 'generateblocks' ), value: 'flex-start' },
							{ label: __( 'Center', 'generateblocks' ), value: 'center' },
							{ label: __( 'Bottom', 'generateblocks' ), value: 'flex-end' },
						] }
						onChange={ ( value ) => {
							setAttributes( {
								verticalAlignment: value,
							} );
						} }
					/>

					<SelectControl
						label={ __( 'Horizontal Alignment', 'generateblocks' ) }
						value={ horizontalAlignment }
						options={ [
							{ label: __( 'Default', 'generateblocks' ), value: '' },
							{ label: __( 'Left', 'generateblocks' ), value: 'flex-start' },
							{ label: __( 'Center', 'generateblocks' ), value: 'center' },
							{ label: __( 'Right', 'generateblocks' ), value: 'flex-end' },
						] }
						onChange={ ( value ) => {
							setAttributes( {
								horizontalAlignment: value,
							} );
						} }
					/>
				</Fragment>
			) }

			{ 'Tablet' === deviceType && (
				<Fragment>
					<SelectControl
						label={ __( 'Vertical Alignment', 'generateblocks' ) }
						help={ __( 'Align grid items. Removes same height columns and overrides grid item content alignment.', 'generateblocks' ) }
						value={ verticalAlignmentTablet }
						options={ [
							{ label: __( 'Inherit', 'generateblocks' ), value: 'inherit' },
							{ label: __( 'Default', 'generateblocks' ), value: '' },
							{ label: __( 'Top', 'generateblocks' ), value: 'flex-start' },
							{ label: __( 'Center', 'generateblocks' ), value: 'center' },
							{ label: __( 'Bottom', 'generateblocks' ), value: 'flex-end' },
						] }
						onChange={ ( value ) => {
							setAttributes( {
								verticalAlignmentTablet: value,
							} );
						} }
					/>

					<SelectControl
						label={ __( 'Horizontal Alignment', 'generateblocks' ) }
						value={ horizontalAlignmentTablet }
						options={ [
							{ label: __( 'Inherit', 'generateblocks' ), value: 'inherit' },
							{ label: __( 'Default', 'generateblocks' ), value: '' },
							{ label: __( 'Left', 'generateblocks' ), value: 'flex-start' },
							{ label: __( 'Center', 'generateblocks' ), value: 'center' },
							{ label: __( 'Right', 'generateblocks' ), value: 'flex-end' },
						] }
						onChange={ ( value ) => {
							setAttributes( {
								horizontalAlignmentTablet: value,
							} );
						} }
					/>
				</Fragment>
			) }

			{ 'Mobile' === deviceType && (
				<Fragment>
					<SelectControl
						label={ __( 'Vertical Alignment', 'generateblocks' ) }
						help={ __( 'Align grid items. Removes same height columns and overrides grid item content alignment.', 'generateblocks' ) }
						value={ verticalAlignmentMobile }
						options={ [
							{ label: __( 'Inherit', 'generateblocks' ), value: 'inherit' },
							{ label: __( 'Default', 'generateblocks' ), value: '' },
							{ label: __( 'Top', 'generateblocks' ), value: 'flex-start' },
							{ label: __( 'Center', 'generateblocks' ), value: 'center' },
							{ label: __( 'Bottom', 'generateblocks' ), value: 'flex-end' },
						] }
						onChange={ ( value ) => {
							setAttributes( {
								verticalAlignmentMobile: value,
							} );
						} }
					/>

					<SelectControl
						label={ __( 'Horizontal Alignment', 'generateblocks' ) }
						value={ horizontalAlignmentMobile }
						options={ [
							{ label: __( 'Inherit', 'generateblocks' ), value: 'inherit' },
							{ label: __( 'Default', 'generateblocks' ), value: '' },
							{ label: __( 'Left', 'generateblocks' ), value: 'flex-start' },
							{ label: __( 'Center', 'generateblocks' ), value: 'center' },
							{ label: __( 'Right', 'generateblocks' ), value: 'flex-end' },
						] }
						onChange={ ( value ) => {
							setAttributes( {
								horizontalAlignmentMobile: value,
							} );
						} }
					/>
				</Fragment>
			) }

			{ applyFilters( 'generateblocks.editor.controls', '', 'gridLayout', props, state ) }
		</>
	);
};