import { Command } from '../structures/command'
import { RunOptions } from '../types/commandTypes'
import { APIEmbed } from 'discord.js'
import { v4 as uuid } from 'uuid'
import { logger } from '../logger'
import { attachmentImages } from '../..'

const color = 0x0099FF
export default new Command({
	name: 'mitgucken',
	description: 'Erfahre wie die Verbindung mit Jellyfin funktioniert und eine WatchTogether Gruppe funktioniert.',
	options: [],
	run: async (interaction: RunOptions) => {
		const requestId = uuid()
		interaction.interaction.followUp('Ich schicke dir einen Guide per DM!')
		const embedList: APIEmbed[] = []
		embedList.push(...installation())
		embedList.push(...configureServer())
		embedList.push(...explainRole())
		embedList.push(...loginInfo())
		embedList.push(...useSyncgroup())

		//logger.info(`Trying to use ${splashScreen.name}`, { requestId, guildId: interaction.interaction.guild?.id })
		logger.info(`Sending guide to ${interaction.interaction.user.id}`, { requestId, guildId: interaction.interaction.guild?.id })
		const userDMchannel = await interaction.interaction.user.createDM()
		userDMchannel.send({ embeds: embedList, files: attachmentImages })
	}
})


export function explainRole(): APIEmbed[] {
	return [{
		color,
		title: "Wie du an einen Account kommst",
		description: roleExplanation
	}]
}
export function installation(): APIEmbed[] {
	const embedList: APIEmbed[] = []
	// DownloadLink and installation
	embedList.push({
		color,
		title: 'Jellyfin Media Player Installation',
		description: 'Du kannst den Jellyfin Media Player von github herunterladen.\n Der Mediaplayer muss genutzt werden, da ein Schauen direkt über das Webinterface den Server zum Schmelzen bringt.\nFühre die Datei aus und installiere den Jellyfin Media Player an den Ort deiner Wahl.',
		fields: [
			{ name: "Windows", value: "https://github.com/jellyfin/jellyfin-media-player/releases/download/v1.9.1/JellyfinMediaPlayer-1.9.1-windows-x64.exe" },
			{ name: "Mac", value: "https://github.com/jellyfin/jellyfin-media-player/releases/download/v1.9.1/JellyfinMediaPlayer-1.9.1-macos-notarized.dmg" }
		],
		image: {
			url: 'attachment://set_splashscreen.png'
		}
	})
	return embedList
}

export function configureServer(): APIEmbed[] {
	const embedList: APIEmbed[] = []
	// Login
	embedList.push({
		color,
		title: "Server Auswahl",
		description: "Die Jellyfin App kann sich mit mehreren Servern verbinden.\n Hattest du noch nie eine Server Verbindung wähle hier 'Server hinzufügen'.",
		image: {
			url: 'attachment://start_screen.png'
		}
	})
	// Server Address
	embedList.push({
		color,
		title: "Server Verbindung",
		description: "Stelle eine Verbindung zum Hartzarett Jellyfin Server her",
		fields: [
			{ name: "Server Adresse", value: "`https://media.hartzarett.ruhr`" }
		],
		image: {
			url: 'attachment://server_verbindung.png'
		}
	})
	return embedList
}

export function loginInfo(): APIEmbed[] {
	const embedList: APIEmbed[] = []
	// Account choice
	embedList.push({
		color,
		title: "Account Auswahl",
		description: "In der Regel sind die Accounts aus Datenschutzgründen versteckt.\nWähle 'Manuelle Anmeldung' aus",
		image: {
			url: 'attachment://auswahl_anmeldung.png'
		}
	})
	// password screen
	embedList.push({
		color,
		title: "Login",
		description: "Melde dich mit dem Usernamen und Passwort an, welches dir von mir zugeschickt wird. Falls du ein neues brauchst führe einmal `/passwort_reset` aus :)",
		image: {
			url: 'attachment://login_screen.png'
		}
	})
	return embedList
}

export function useSyncgroup(): APIEmbed[] {
	const embedList: APIEmbed[] = []
	embedList.push({
		color,
		title: "SyncPlay Menü",
		image: {
			url: 'attachment://jellyfin_ubersicht.png'
		},
		description: "Im Hauptbildschirm findest du die 'SyncPlay' Einstellungen oben rechts.",
	})
	// join group
	embedList.push({
		color,
		title: "Gruppe beitreten",
		image: {
			url: 'attachment://gruppe_beitreten.png'
		},
		description: "Suche dir aus dem Dropdown die SyncPlay Gruppe aus, die zu deinem Event gehört.",
	})
	// leave group
	embedList.push({
		color,
		title: "Gruppe verlassen",
		image: {
			url: 'attachment://gruppe_verlassen.png'
		},
		description: "Wenn du die Watchparty verlassen möchtest, kannst du das ebenfalls über das Menü oben rechts tun.",
	})
	//resume playback
	embedList.push({
		color,
		title: "Wiedergabe fortsetzen",
		image: {
			url: 'attachment://wiedergabe_fortsetzen.png'
		},
		description: "Wenn du aus der Watchparty rausgeflogen bist, oder die Wiedergabe verlassen hast, kannst du über das Menü oben rechts auch wieder zurückkehren.",
	})
	return embedList
}

const roleExplanation = `Mit einer Rolle kann dafür gesorgt werden, dass du einen dauerhaften Account auf dem Mediaserver hast. Wende dich bei Bedarf an Samantha oder Markus.\n
  Für eine watchparty bekommst du allerdings automatisch einen Account. Hierfür melde einfach Interesse an dem Event an. Wenn du für das Event Interesse angemeldet hast bekommst du automatisch beim Start des Events einen Benutzernamen und das dazugehörige Passwort zugesendet.\n
  Hast du kein Interesse angemeldet bekommst du automatisch einen Nutzernamen und Passwort zugeschickt wenn du den Channel betrittst in dem das Event stattfindet.`

