import { useCallback } from 'react';
import { Group, Image, Text, Title } from '@mantine/core';
import { useInfo, useSend, useShowImage } from '/@/remote/store';
import { RemoteButton } from '/@/remote/components/buttons/remote-button';
import formatDuration from 'format-duration';
import debounce from 'lodash/debounce';
import {
RiHeartLine,
RiPauseFill,
RiPlayFill,
RiRepeat2Line,
RiRepeatOneLine,
RiShuffleFill,
RiSkipBackFill,
RiSkipForwardFill,
RiVolumeUpFill,
} from 'react-icons/ri';
import { PlayerRepeat, PlayerStatus } from '/@/renderer/types';
import { WrapperSlider } from '/@/remote/components/wrapped-slider';
import { Tooltip } from '/@/renderer/components/tooltip';
import { Rating } from '/@/renderer/components/rating';
export const RemoteContainer = () => {
const { position, repeat, shuffle, song, status, volume } = useInfo();
const send = useSend();
const showImage = useShowImage();
const id = song?.id;
const setRating = useCallback(
(rating: number) => {
send({ event: 'rating', id: id!, rating });
},
[send, id],
);
const debouncedSetRating = debounce(setRating, 400);
return (
<>
{id && (
<>
{song.name}
Album: {song.album}
Artist: {song.artistName}
Duration: {formatDuration(song.duration)}
{song.releaseDate && (
Released: {new Date(song.releaseDate).toLocaleDateString()}
)}
Plays: {song.playCount}
>
)}
send({ event: 'previous' })}
>
{
if (status === PlayerStatus.PLAYING) {
send({ event: 'pause' });
} else if (status === PlayerStatus.PAUSED) {
send({ event: 'play' });
}
}}
>
{id && status === PlayerStatus.PLAYING ? (
) : (
)}
send({ event: 'next' })}
>
send({ event: 'shuffle' })}
>
send({ event: 'repeat' })}
>
{repeat === undefined || repeat === PlayerRepeat.ONE ? (
) : (
)}
{
if (!id) return;
send({ event: 'favorite', favorite: !song.userFavorite, id });
}}
>
{(song?.serverType === 'navidrome' || song?.serverType === 'subsonic') && (
debouncedSetRating(0)}
/>
)}
{id && position !== undefined && (
formatDuration(value * 1e3)}
leftLabel={formatDuration(position * 1e3)}
max={song.duration / 1e3}
rightLabel={formatDuration(song.duration)}
value={position}
onChangeEnd={(e) => send({ event: 'position', position: e })}
/>
)}
}
max={100}
rightLabel={
{volume ?? 0}
}
value={volume ?? 0}
onChangeEnd={(e) => send({ event: 'volume', volume: e })}
/>
{showImage && (
send({ event: 'proxy' })}
/>
)}
>
);
};