const { TouchBar } = require("electron");
const {
	TouchBarButton,
	TouchBarLabel,
	TouchBarSpacer,
	TouchBarSegmentedControl,
	TouchBarScrubber,
} = TouchBar;

const registerCallback = require("../../providers/song-info");
const getSongControls = require("../../providers/song-controls");

// Songtitle label
const songTitle = new TouchBarLabel({
	label: "",
});
// This will store the song controls once available
let controls = [];

// This will store the song image once available
const songImage = {};

// Pause/play button
const pausePlayButton = new TouchBarButton();

// The song control buttons (control functions are in the same order)
const buttons = new TouchBarSegmentedControl({
	mode: "buttons",
	segments: [
		new TouchBarButton({
			label: "⏮",
		}),
		pausePlayButton,
		new TouchBarButton({
			label: "⏭",
		}),
		new TouchBarButton({
			label: "👎",
		}),
		new TouchBarButton({
			label: "👍",
		}),
	],
	change: (i) => controls[i](),
});

// This is the touchbar object, this combines everything with proper layout
const touchBar = new TouchBar({
	items: [
		new TouchBarScrubber({
			items: [songImage, songTitle],
			continuous: false,
		}),
		new TouchBarSpacer({
			size: "flexible",
		}),
		buttons,
	],
});

module.exports = (win) => {
	const { playPause, next, previous, like, dislike } = getSongControls(win);

	// If the page is ready, register the callback
	win.once("ready-to-show", () => {
		controls = [previous, playPause, next, like, dislike];

		// Register the callback
		registerCallback((songInfo) => {
			// Song information changed, so lets update the touchBar

			// Set the song title
			songTitle.label = songInfo.title;

			// Changes the pause button if paused
			pausePlayButton.label = songInfo.isPaused ? "▶️" : "⏸";

			// Get image source
			songImage.icon = songInfo.image
				? songInfo.image.resize({ height: 23 })
				: null;

			win.setTouchBar(touchBar);
		});
	});
};
