import {FC, FormEventHandler} from 'react'
import styled from 'styled-components'
import { LeftSidebarWithMenu } from '@theoryofnekomata/viewfinder'
import {models} from '@tonality/library-common'
import CreateRingtoneForm from '../../organisms/forms/CreateRingtone'
import Link from '../../molecules/navigation/Link'
import OmnisearchForm from '../../organisms/forms/Omnisearch'
import Brand from '../../molecules/brand/Brand'

const TopBarComponent = styled('div')({
	backgroundColor: 'var(--color-bg, white)',
})

const SidebarMenuComponent = styled('div')({
	backgroundColor: 'var(--color-bg, white)',
})

const Padding = styled('div')({
	padding: '2rem 0',
})

type Props = {
	onSearch?: FormEventHandler,
	onSubmit?: FormEventHandler,
	composer: models.Composer,
	currentRingtone?: models.Ringtone,
	composerRingtones: models.Ringtone[],

	updateTempo: ({ songRef, dataRef, setTempo, }) => (...args: unknown[]) => void,
	updateView: ({ setNoteGlyph, setRestGlyph, noteGlyphs, restGlyphs, }) => (...args: unknown[]) => void,
	addRest: ({ formRef, dataRef, songRef, }) => (...args: unknown[]) => void,
	addNote: ({ dataRef, formRef, songRef, soundManagerRef, }) => (...args: unknown[]) => void,
	togglePlayback: ({ formRef, songRef, soundManagerRef, setPlayTimestamp, setPlaying, }) => (...args: unknown[]) => void,
	updateSong: ({ formRef, songRef, }) => (...args: unknown[]) => void,
	play: ({ dataRef, playing, setPlaying, playTimestamp, }) => void,
}

const CreateRingtoneTemplate: FC<Props> = ({
	onSearch,
	onSubmit,
	composer,
	currentRingtone = {},
	composerRingtones = [],
	updateTempo,
	updateView,
	addRest,
	addNote,
	togglePlayback,
	updateSong,
	play,
}) => {
	return (
		<LeftSidebarWithMenu.Layout
			brand={
				<Brand />
			}
			userLink={
				<div>
					User
				</div>
			}
			topBarComponent={TopBarComponent}
			sidebarMenuComponent={SidebarMenuComponent}
			topBarCenter={
				<OmnisearchForm
					labels={{
						form: 'Search',
						query: 'Query',
					}}
					onSubmit={onSearch}
					action="/api/a/search"
				/>
			}
			linkComponent={({ url, icon, label, }) => (
				<Link
					href={url}
				>
					<LeftSidebarWithMenu.SidebarMenuContainer>
						<LeftSidebarWithMenu.SidebarMenuItemIcon>
							{icon}
						</LeftSidebarWithMenu.SidebarMenuItemIcon>
						{label}
					</LeftSidebarWithMenu.SidebarMenuContainer>
				</Link>
			)}
			moreLinkMenuItem={{
				label: 'More',
				icon: 'M',
				url: {},
			}}
			moreLinkComponent={({ url, icon, label, }) => (
				<Link
					href={url}
				>
					<LeftSidebarWithMenu.MoreSidebarMenuContainer>
						<LeftSidebarWithMenu.MoreSidebarMenuItemIcon>
							{icon}
						</LeftSidebarWithMenu.MoreSidebarMenuItemIcon>
						{label}
					</LeftSidebarWithMenu.MoreSidebarMenuContainer>
				</Link>
			)}
			sidebarMenuItems={[
				{
					id: 'browse',
					label: 'Browse',
					icon: 'B',
					url: {
						pathname: '/ringtones',
					},
				},
				{
					id: 'compose',
					label: 'Compose',
					icon: 'C',
					url: {
						pathname: '/my/create/ringtone',
					},
				},
			]}
		>

			<Padding>
				<CreateRingtoneForm
					onSubmit={onSubmit}
					defaultValues={{
						...currentRingtone,
						composerId: composer.id,
					}}
					action="/api/a/create/ringtone"
					labels={{
						form: 'Create Ringtone',
						name: 'Name',
						data: 'Data',
						cta: 'Post',
					}}
					updateTempo={updateTempo}
					updateView={updateView}
					addRest={addRest}
					addNote={addNote}
					togglePlayback={togglePlayback}
					updateSong={updateSong}
					play={play}
				/>
			</Padding>
		</LeftSidebarWithMenu.Layout>
	)
}

export default CreateRingtoneTemplate